首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

IO完成端口中,传输数据数量为0有关问题

2012-03-09 
IO完成端口中,传输数据数量为0问题?Socket绑定IO完成端口后,在接收数据的时候函数BOOL WINAPI GetQueuedCo

IO完成端口中,传输数据数量为0问题?
Socket绑定IO完成端口后,在接收数据的时候函数
BOOL WINAPI GetQueuedCompletionStatus(
  __in HANDLE CompletionPort,
  __out LPDWORD lpNumberOfBytes,
  __out PULONG_PTR lpCompletionKey,
  __out LPOVERLAPPED* lpOverlapped,
  __in DWORD dwMilliseconds
)
中的lpNumberOfBytes的值很多时候是0,这种情况下应该怎么处理,是按照SOCKET失败处理吗?

[解决办法]
如果你使用了AcceptEx且不带关联数据的,或者使用了ConnectEx且不带关联数据的,这些操作返回lpNumberOfBytes都会是0;
除此以外,还有一种可能是你投递了一个0字节的缓冲区,它也会返回0,你需要手动调用接收函数来接收。
再有就是socket关闭,也会是0

情况很多,要区别对待
[解决办法]
不能简单的当成失败处理,需要结合你的OVERLAPPED重叠结构一起分析,是否是对方closesocket了SOCKET了。

热点排行