Windows UDP socket recvfrom返回10054错误的解决办法
来源:互联网 发布:dota后期三大核 知乎 编辑:程序博客网 时间:2024/05/16 12:33
现象:
在Windows 7系统上,A使用UDP socket,调用sendto函数向一个目标地址B发送数据,但是目标地址B没有接收数据,如果A此时立即调用recvfrom试图接收目标地址B发回的数据的话,recvfrom会立即返回-1,WSAGetLastError()返回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
阅读全文
0 0
- Windows UDP socket recvfrom返回10054错误的解决办法
- Windows UDP socket recvfrom返回10054错误的解决办法
- windows socket编程中调用recvfrom返回-1(windows error 10014)错误的问题
- socket错误使用recvfrom 返回-1的问题
- 使用recvfrom()函数,返回10054错误的问题
- UDP套接字调用recvfrom返回WSAECONNRESET(10054)
- CSocket Recvfrom() 返回错误 WSAECONNRESET
- UDP通信recvfrom返回invalid argument
- 关于recvfrom产生10054的错误
- 关于SOCKET编程里面udp编程sendto和recvfrom的问题
- windows connect()返回错误的代码10061的解决办法
- udp socket connect一个不存在的地址后调用sendto返回111错误(connect refused)
- 使用recvfrom()接收UDP包在Windows和Linux平台的不同表现
- UDP发送Select不正确返回的解决办法
- 多进程udp接收recvfrom返回-1原因分析
- SOCKET UDP recvfrom循环中退出策略选择分析
- UDP Socket出现10054错误码的解决方法
- 关于udp socket recvfrom函数的一个易错问题: 如果应用程序指定的接收长度不够怎么办?
- hdu 6053 TrickGCD(莫比乌斯反演)
- 按字典序算法全排列
- RecycleView的侧拉索引
- JavaScript中对象调用其他函数/对象成员
- 百度面试题20170814
- Windows UDP socket recvfrom返回10054错误的解决办法
- AS-cannot resolve constructor intent
- C# String与StringBuilder
- js Tree 简单使用例子
- VS2017上执行VS2013项目错误MSB802之解决方案
- Mapreduce模型
- Android ActionBar应用实战,高仿微信主界面的设计
- 算法竞赛入门——因子和阶乘
- 矩阵乘法与运用