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了。