我正在尝试使用 sendto 和 recvfrom 函数的 udpclient 程序。我将套接字的 SO_RCVTIMEO 值设置为 10 秒。
我正在将套接字绑定(bind)到源 IP 地址和源端口。当我检查 netstat 时,我可以看到没有其他进程绑定(bind)了相同的值。我的绑定(bind)操作也成功了。
然后我正在执行一个 sendto,它向目的地发送一个回显请求。 sendto 之后我正在做一个 recvfrom。但是 recvfrom 失败时说 ERRNO 11 这意味着再试一次 :(
但是,如果我检查 wireshark 日志,我可以看到 ECHO REQUEST 和 ECHO REPLY 会在几毫秒内到达,但 recvfrom 仍然无法读取它:(。在 wireshark 中,我看到了 UDP ECHO REQUEST 和 UDP ECHO REPLY。
我的系统中没有启用任何防火墙。
有什么方法可以调试这个问题:(我真的很怀疑 RECV 操作是否有任何方法可以查明数据包是否正在发送到我的 sockFD ???
更新 1: 我的 Linux PC 通过交换机连接到另一台充当服务器的 Linux PC。
最佳答案
我终于找到了问题......
似乎数据包的 UDP 校验和是错误的,因为 IP STACK 在数据包到达 SOCKET 之前丢弃了数据包 :( 结果是 recvfrom 超时并退出。
关于linux - recvfrom 失败,错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271082/