Linux recvfrom失败,出现错误11

Linux recvfrom失败,出现错误11,linux,sockets,udp,Linux,Sockets,Udp,我正在试用一个udpclient程序,它使用sendto和recvfrom函数。我正在将我的套接字的SO_RCVTIMEO值设置为10秒 我正在将套接字绑定到源IP地址和源端口。当我检查netstat时,我可以看到没有其他进程绑定了相同的值。我的绑定操作也成功了 然后我做一个sendto,它向目的地发送一个echo请求。在发送到之后,我正在做一个recvfrom。但是,从fail的“ERRNO 11”这句话中可以看出,它的意思是“再试一次”:( 但是,如果我检查wireshark日志,我可以看到

我正在试用一个udpclient程序,它使用sendtorecvfrom函数。我正在将我的套接字的SO_RCVTIMEO值设置为10秒

我正在将套接字绑定到源IP地址和源端口。当我检查netstat时,我可以看到没有其他进程绑定了相同的值。我的绑定操作也成功了

然后我做一个sendto,它向目的地发送一个echo请求。在发送到之后,我正在做一个recvfrom。但是,从fail的“ERRNO 11”这句话中可以看出,它的意思是“再试一次”:(

但是,如果我检查wireshark日志,我可以看到在几毫秒内发出的回显请求和回显回复,但recvfrom仍然无法读取:(.在wireshark中,我看到UDP回显请求和UDP回显回复

我的系统中没有启用任何防火墙

有没有办法调试这个问题:(我真的怀疑RECV操作有没有办法确定数据包是否被发送到我的sockFD


更新1:我的linux PC通过交换机连接到另一台作为服务器的linux PC。

EAGAIN
from
recvfrom()
意味着三件事之一:

  • 插座已设置为非阻塞状态;或
  • 使用了
    MSG\u DONTWAIT
    标志;或
  • 接收超时已过期

对我来说,您的套接字似乎是非阻塞的。

我至少已经找到了问题所在


数据包的UDP校验和似乎是错误的,因为IP堆栈在数据包到达套接字之前丢弃了数据包:(结果recvfrom超时并出现。

因此,您在Wireshark中看到一个UDP数据包“ECHO REPLY”指向套接字绑定的端口“ECHO REPLY”看起来有点像ICMP。您的安装说明不太详细。您的udpclient是否为sendto和recvfrom使用了相同的端口?如果没有,请检查端口号(endianess)。您是否检查了bind()的成功?您的客户端端口是否已被另一个程序使用(请参阅:netstat)?关于您的“linux上的so_REUSEPORT”问题,通常一个receiv套接字会得到数据包。嗨,Harper,谢谢你的回复。是的,我得到的是套接字绑定到的同一端口的回音回复。是的,绑定返回成功,我正在使用netstat命令查看实例。除了我的应用程序之外,我的客户端端口没有被任何人使用。你尝试过netcat(
nc
)看看你是否能在机器之间通话?电话是立即还是10秒后返回?他说
所以设置好了。@Nikolai:当然,但他也说回复在
所以时间内很快就回来了。嗯,我在问题中看不到。@Nikolai:“回音回复在几毫秒内到达,但recvfrom仍然无法读取它”准确地说-有一个数据包在电线上,但应用程序没有看到它。