免费seo网站优化工具,建站网站加盟,个人养老保险怎么买最划算,网站设计文稿现象#xff1a; 在Windows 7系统上#xff0c;A使用UDP socket#xff0c;调用sendto函数向一个目标地址B发送数据#xff0c;但是目标地址B没有接收数据#xff0c;如果A此时立即调用recvfrom试图接收目标地址B发回的数据的话#xff0c;recvfrom会立即返回-1#xff… 现象 在Windows 7系统上A使用UDP socket调用sendto函数向一个目标地址B发送数据但是目标地址B没有接收数据如果A此时立即调用recvfrom试图接收目标地址B发回的数据的话recvfrom会立即返回-1WSAGetLastError()返回10045。 原因 上述现象是Windows socket的一个bug当UDP Socket在某次发送后收到一个不可到达的ICMP包时这个错误将在下一个接收中返回所以上面的套接字在下一次的接收中返回了SOCKET_ERROR,错误是10045。 解决办法 使用WSAIoctl设置UDP socket的工作模式让其忽略这个错误。具体做法如下 #include Winsock2.h
#include Mstcpip.h
#include stdio.h#pragma comment(lib, ws2_32.lib)
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR, 12)BOOL bNewBehavior FALSE;
DWORD dwBytesReturned 0;
WSAIoctl(iSock, SIO_UDP_CONNRESET, bNewBehavior, sizeof bNewBehavior, NULL, 0, dwBytesReturned, NULL, NULL); SIO_UDP_CONNREST选项Controls whether UDP PORT_UNREACHABLE messages are reported. Set to TRUE to enable reporting. Set to FALSE to disable reporting. 备注
setsockopt是修改套接口的属性只是该套接口在工作的过程中需要用到的一些参数WSAIoctl则是修改套接口的工作模式更多的定义了这个套接口要以怎样的形式进行工作有本质的区别。 参考文献 [1]. http://blog.csdn.net/wpullo/article/details/5905616 [2]. http://msdn.microsoft.com/zh-cn/ms741621 [3]. http://blog.sina.com.cn/s/blog_536e955201009xqp.html [4]. http://blog.csdn.net/threewall/article/details/5089817