注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多多的爹

 
 
 

日志

 
 

再来发点牢骚  

2009-08-27 21:56:32|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    《Windows网络编程技术》应该是中文市面上最权威的Windows网络编程方面的书籍了。我想大多数研究Windows平台网络的人,都应该看过这本书。从内容来看,虽然比较落后,应该是2000年左右的书,但这些年网络编程的技术并没有太多更新。要说变,反而是基于这些基础协议之上的东西越来越日新月异了——HTML5、Javascript等等等等。反正对于常年搞C++的人来说,这些东西都太“潮”。说远了,还是说说这本书。书应该是老外写的,符合老外著书一向的大、全、细原则。然后这本这是有很多的硬伤,最严重的一点,就是翻译水平太次了,甚至觉得是个技术门外汉干得活,很多专业名词与国内已经约定俗成的计算机用语不合。再就是太过于大全细了,以致重点不突出,许多地方笔墨太少。比如我看了快一个星期的第8章,总共才35页。要讲清楚那么多问题,真有点捉襟见肘,我基本上都是参考完代码后再调试实验很长时间才搞清楚流程。就是这样到现在为止最后一部分“完成端口”还是没搞明白。并且最关键的是,每种方式的优劣势并没有分析清楚,何时用哪种,哪种效率最高,应该如何使用,都没有说明。
    差点成了书评,继续发点牢骚话,说说书中的明显问题:
    “完成例成”的说明是有问题的。书上说,当调用WSAWaitMultiObjects或者SleepEx等待后,判断返回值是否是WSA_IO_COMPLETION。其实这是错误的,因为根本就不存在WSA_IO_COMPLETION的定义。奇怪的是我在MSDN中查找WSAWaitMultiObjects的说明,也发现了WSA_IO_COMPLETION。难道是早期的Windows就有这个定义?幸好在WSAWaitMultiObjects说明的最后,我找到了下面这段话:
    There seems to be a typo in the Remarks section. It is mentioned that the API would return WSA_IO_COMPLETION. The correct return value as mentioned in Return Value section is WSA_WAIT_IO_COMPLETION
    在Google中搜索中WSA_IO_COMPLETION,还能找出好几页的结果,真是一群只知道转发的笨蛋啊。
    另一个问题,SleepEx后,并不能用判断WSA_WAIT_IO_COMPLETION的方法来决定是否IO结束。因为这时候可能由于主机速度快于客户端,导致IO区为空。如果认为此时就结束了IO操作,后面的数据就接收不到了。正确的做法是在完成函数CompletionROUTINE中,判断参数cbTransferred是否为0,当cbTransferred为0了,才表示IO为空,可以结束IO操作。
  评论这张
 
阅读(5)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017