linux - recvfrom 失败,错误 11

标签 linux sockets udp

我正在尝试使用 sendtorecvfrom 函数的 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/

相关文章:

python - UDP 聊天,服务器也可以聊天

linux - 在命令行 Git 中编辑不正确的提交消息

version-control - 如何使用 Git 更新我的目录和其他内容?

java - Java 中的图像转换。通过套接字传输图像

c++ - 使用 Hook Engine 时的 ACCESS_VIOLATION

javascript - 如何将 Socket.io 路由代码分离到不同的文件中

通过所有数据包到达的 C# UDP 数据包丢失(WireShark)

c++ - 如何在 tty 上绘制线图?

Linux Mint 使 Kohana 的日志和缓存可写

networking - 同一台计算机上的多个应用程序可以接收 UDP 广播吗?