recvfrom失败,错误11

时间:2010-07-17 10:22:40

标签: linux sockets udp

我正在尝试使用 sendto recvfrom 函数的udpclient程序。我将 SO_RCVTIMEO 值设置为我的套接字10秒。

我将套接字绑定到源ipaddress和sourceport。当我检查netstat时,我可以看到没有其他进程绑定相同的值。我的绑定操作也是成功的。

然后我正在做一个sendto,它正在向目的地发送一个echo请求。发送后我正在做一个recvfrom。但recvfrom失败的说ERRNO 11意味着再试一次 :(

但是,如果我检查wireshark日志,我可以看到ECHO REQUEST和ECHO REPLY即将在几毫秒内出现,但仍然无法读取它:(。在wireshark中,我看到UDP ECHO请求和UDP ECHO REPLY。

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

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

UPDATE1:我的linux PC通过交换机连接到另一台充当服务器的linux pc。

2 个答案:

答案 0 :(得分:2)

我发现了ISSUE atlast ...

似乎数据包的UDP校验和是错误的,因为IP STACK在数据包到达SOCKET之前丢弃了数据包:(因此recvfrom正在超时并且出来。

答案 1 :(得分:0)

来自EAGAIN

recvfrom()暗示了以下三点之一:

  • 套接字已设置为非阻塞;或
  • 使用了MSG_DONTWAIT标志;或
  • 接收超时已过期。

听起来你的插座对我没有阻挡。