挖井

类库大魔王的挖井日记

挖一口属于自己的井


关于完成端口第一次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)类型的,添加了之后,也正常了。唉,辛苦啊,搜索了网上不少的资料,却没有发现什么直接点的答案。但现在总算可以松口气了。真的是要实践中才会发现问题!!

本文地址:

https://minidump.info/blog/2004/12/E5-85-B3-E4-BA-8E-E5-AE-8C-E6-88-90-E7-AB-AF-E5-8F-A3-E7-AC-AC-E4-B8-80-E6-AC-A1WSARecv-E6-8A-95-E9-80-92-E5-A4-B1-E8-B4-A5/

上一篇

抓包

为了写WinSock程序,找了几个抓包的程序,CommView 4.1 和IRIS 4.07,发现它们两个界面都差不多,好像IRIS 的功能稍微多一点点。但是不知道为什么,在设置Filte r的时候,IRIS总是有问题,IP栏里不能输入3位数的十进制数,也不像是能输入16进制值的。在Addre...…

imported from CSDN 全文阅读
下一篇

元旦快乐!!

相信 在寒冷的 冬天 没有 我的 祝福 您也一 样 的快乐 有 了我 的问候 您 会 更 加 幸 福 虽 然 相 ...…

imported from CSDN 全文阅读