关于完成端口第一次WSARecv投递失败

 最后的最后,我终于发现了关于完成端口第一次WSARecv投递失败的原因!
MSDN中关于WSARecv的原型如下:
int WSARecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );

其中,SOCKET有了,Buffer也有了,Overlapped结构也有了,最后的可以设为NULL,只有NumberOfBytesRecved和Flags是要再另外声明传递进去的。但是,这里有一个容易漏掉的地方,就是第5个参数Flags的指针,在传递进去之前,一定要初始化Flags的值为0。我到最后看到CSDN上一篇帖子上的代码,我的和那个几乎一样,但那个能正常收到数据,我的却总是10045错误,一条一条地查对比较代码,发现唯一有影响的地方,就是那个多了一条Flags=0,而我的没有,马上翻到MSDN上的说明,一看,是个[In,Out]类型的,添加了之后,也正常了。唉,辛苦啊,搜索了网上不少的资料,却没有发现什么直接点的答案。但现在总算可以松口气了。真的是要实践中才会发现问题!!

你可能感兴趣的:(关于完成端口第一次WSARecv投递失败)