woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

IOCP时候,WSASend出现句柄无效错误,err code = 6

OVERLAPPED   over;  
  ZerMemory(&over,sizeof(OVERLAPPED));  
  WSASend(s,   &DataBuf,   1,   &SendBytes,   0,&over,   NULL);  
  这样能成功.  
  如果不执行ZerMemory(&over,sizeof(OVERLAPPED));  
  WSASend就会失败,错误是"句柄无效",请问高手这是为什么?  
  还有,如果同时执行两次WSASend,OVERLAPPED只有一个,能成功吗?系统是怎样分别出哪次WSASend?  
  谢谢!

======================================================================================

typedef   struct   _OVERLAPPED   {    
          ULONG_PTR     Internal;    
          ULONG_PTR     InternalHigh;    
          DWORD     Offset;    
          DWORD     OffsetHigh;    
          HANDLE   hEvent;    
  }   OVERLAPPED;    
  注意结构里有HANDLE   hEvent  
  当没使用ZeroMemory时,hEvent被填充为0xCCCCCCCC,或其他的,就会出现"句柄无效"的错误

======================================================================================

但使用了ZeroMemory时,hEvent被填充为0x00000000,也不是一个有效的句柄呀,继续.

======================================================================================

sdk的代码中hEvent   =   NULL。这就是原因!因为你可以不使用事件的,看msdn吧!

posted on 2008-08-19 17:24 肥仔 阅读(1166) 评论(0)  编辑 收藏 引用 所属分类: 网络编程


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理