博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows UDP socket recvfrom返回10054错误的解决办法
阅读量:6763 次
发布时间:2019-06-26

本文共 1200 字,大约阅读时间需要 4 分钟。

hot3.png

现象:

在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 
#include
#include
#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.

备注:

  1. 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

posted @ 2014-10-29 12:03 阅读(2301) 评论(0) 收藏

 

 

 

 

 

转载于:https://my.oschina.net/yuyang/blog/750283

你可能感兴趣的文章
2018年8月Top 10 JavaScript开源项目
查看>>
手游开发如何选择后端服务
查看>>
开学季你最想要的这10本编程新书
查看>>
node中的http会了吗? 来手写一个属于自己的'cgp-server'静态服务
查看>>
守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
查看>>
Web3与智能合约交互实战
查看>>
双十一你想要的,我们提前给你备好了——七牛云产品0.1元起购
查看>>
视频直播:Windows中各类画面源的截取和合成方法总结
查看>>
SQL老司机,在SQL中计算 array & map & json数据
查看>>
绘制图片
查看>>
前端工程优化:javascript的优化小结
查看>>
Android 动画实战-仿微博雷达功能
查看>>
leetCode 13 Roman to Integer
查看>>
SpringBoot高级篇Redis之Hash数据结构使用姿势
查看>>
javaScript设计模式:Observer(观察者)模式实践(一)
查看>>
介绍两个好玩的和Github相关的Chrome扩展
查看>>
PC浏览器播放HLS协议的视频
查看>>
函数计算性能福利篇(二) —— 业务冷启动优化
查看>>
Python学习之路25-使用一等函数实现设计模式
查看>>
macOS 10 13 Cocoapods 命令错误
查看>>