UDP并发客户端recvfrom错误

Posted

技术标签:

【中文标题】UDP并发客户端recvfrom错误【英文标题】:UDP Concurrent client recvfrom error 【发布时间】:2013-10-27 13:30:20 【问题描述】:

我现在正在使用 C/C++ 进行并发套接字编程。我只是让服务器接收来自客户端的请求并将响应数据包发送给客户端。我使用一个线程来接收来自客户的请求。当服务器收到新请求时,将创建一个新线程以向客户端发送一些数据包。但是,当我的服务器将数据包发送到该特定客户端时,我客户端的 recvfrom 总是返回 winsock 错误 10054。

【问题讨论】:

您收到“ICMP 端口无法访问”响应,您应该正在处理它。 【参考方案1】:

此错误消息表示 udp 端口​​已关闭,并且您正在关闭的端口上接收数据包。例如,在 voip 电话中,客户端发送 origport=12295 说明请在此发送数据包并将关闭工作端口 32000 08:43:32.377 cip=172.x.23.225 sip=10.x.20.2 cport=32000 sport=32128 origport=12295

但是如果服务器不理解这一点,而你仍然在 32000 上收到来自服务器的数据包,那么客户端将显示此错误消息

【讨论】:

【参考方案2】:

根据this forum thread,这是一个无害的错误,你可以在客户端忽略它。

【讨论】:

如何忽略它?> 我仍然得到 recvfrom 返回值 -1。即使我收到此错误,recvfrom 中的缓冲区是否仍然收到消息。

以上是关于UDP并发客户端recvfrom错误的主要内容,如果未能解决你的问题,请参考以下文章

关于UDP数据报引发“异步错误”的疑问

Python 调用multiprocessing模块下面的Process类方法(实现服务器客户端并发)-UDP协议

Python学习笔记九(UDP套接字和并发编程)

关于socket通信UDP协议的问题,在客户端client下创建两个套接字s、s1分别用于recvfrom()和sendto()。

处理 winsock 10004 错误的最佳方法

WinSock UDP 短连接