我正在尝试使用 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。
答案 0 :(得分:2)
我发现了ISSUE atlast ...
似乎数据包的UDP校验和是错误的,因为IP STACK在数据包到达SOCKET之前丢弃了数据包:(因此recvfrom正在超时并且出来。
答案 1 :(得分:0)
EAGAIN
的 recvfrom()
暗示了以下三点之一:
MSG_DONTWAIT
标志;或听起来你的插座对我没有阻挡。