- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在这个问题上有点困惑 :-)。我有一些代码在 Ubuntu 10.04 上运行,它使用 recvmsg 调用来接收音频 UDP 数据包。这部分是一个更大的 SIP 客户端的一部分,我一直在通过网络使用远程系统对其进行测试。
通常,我可以毫无问题地建立通话,并且音频可以愉快地从远程源传输到我的程序。但是,经过一段时间后,我在端口上遇到了读取错误。发生这种情况时,我得到错误号 EHOSTUNREACH。在这个错误中,我关闭了我的端口并终止了连接。
奇怪的是,我的印象是这会在响应 ICMP 消息时发生。可能是由于暂时的网络故障。然而,在重现这个问题并进行了完整的数据包捕获之后,我看到了 ICMP ping 和响应的所有位置。我没有看到内核解释为 EHOSTUNREACH 的任何 ICMP 错误消息。
我的 UDP 端口非常基础。如果确实需要,我可以发布代码。但这只是一个基本的 SOCK_DGRAM。在遇到此错误条件之前,套接字有时能够接收数据超过 8 小时。
关于如何进一步解决这个问题的任何想法。我试图理解为什么我会收到此 errno,但没有与之关联的 ICMP 消息。
最佳答案
您是否使用相同的套接字发送数据包?或者共享同一端口的不同套接字?我很好奇是否有可能另一个套接字实际上产生了错误。
我记得几年前处理导致 sendto 和 recvfrom 都失败的 ICMP 消息像你描述的那样断断续续。如果我记得,解决方法是忽略它并执行另一个 recvfrom/recvmsg。
至于为什么在没有看到在线路上的 ICMP 消息的情况下您会收到该错误代码,这超出了我的理解范围。您确定您将观察到的 ICMP 消息正确地视为“ping 和响应”吗? ICMP 消息没有端口号,因此与该远程主机关联的所有套接字(或随机套接字)都可能返回此错误代码。
我认为可能有一个 ioctl 可以禁用此行为,但我找不到。
类似的讨论here .
关于linux - UDP recvmsg 上的 EHOSTUNREACH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055655/
iam 尝试使用 sendmsg、recvmsg 函数在两个进程之间传递文件描述符.. 我通过在unix域中创建套接字来做到这一点。 当我执行它时,我收到了recvmsg的操作不支持错误,它与send
我正在使用 recvmsg 和 sendmsg 通过异步 STREAM 套接字发送数据。要传输的数据量相当大,在 15 MB 到 30 MB 之间。 我不明白为什么数据到达时损坏了。发送消息和接收函数
我有套接字系列 PF_PACKET 类型 SOCK_RAW。通过 recvmsg 和 poll() 读取消息。我随机地和定期地收到 recvmsg 返回 EDEADLK。我尝试用下一个代码调试这个问题
本文整理了Java中org.zeromq.ZMsg.recvMsg()方法的一些代码示例,展示了ZMsg.recvMsg()的具体用法。这些代码示例主要来源于Github/Stackoverflow/
自 recvmsg()在 asyncio 中丢失模块,我试图以与 BaseEventLoop.sock_recv() 完全相同的方式重新实现它已实现: import asyncio, socket d
我正在Linux中打开RAW套接字并读取所有消息。 recvmsg(mysock, &msg, 0); 我遍历该msg缓冲区上的所有cmsg,但只有一个。 for (c = CMSG_FIRS
如果C套接字的recvmsg()具有队列,我如何找出队列中积压了多少项? 我的问题是,从recvmsg()接收到某些内容后,代码的速度有时会比发送到recvmsg()的数据速率慢,这在逻辑上会导致排队
我在接收 UDP 数据包时遇到问题。我的环境在 ARMv7 上运行 Android 2.1。对于 C 套接字编程,我使用 recvmsg 从内核接收数据包,但偶尔会出现一些数据包丢失事件。发送方和接收
我正在开发一个在两个进程之间进行IPC调用的程序。我使用socketpair创建两个套接字fd: int fds[2] = {-1,-1}; if (socketpair(AF_LOCAL, SOCK
在这个问题上有点困惑 :-)。我有一些代码在 Ubuntu 10.04 上运行,它使用 recvmsg 调用来接收音频 UDP 数据包。这部分是一个更大的 SIP 客户端的一部分,我一直在通过网络使用
我正在编写一个程序,使用 sendmsg 在两个进程之间传递文件描述符和 recvmsg通过域套接字。对于发送文件描述符,附加数据包含在 msghdr.msg_iov 中和 msghdr.msg_io
我有一个使用 pthreads 的小 Unix 守护进程。一个线程循环运行,使用 recvmsg 读取网络数据包。当守护进程收到信号时,会设置一个标志,告诉所有线程跳出循环并退出。然而,“监听”线程从
我正在编写一个 CAN 记录器程序。我记录数据的方式类似于 candump -tool 在调用 candump 时执行此操作喜欢 candump any : https://github.com/li
我正在使用 Linux 机器,并且正在发送 UDP 数据包。 我想为传输的数据包获取 NIC 上的硬件时间戳。我看过其他帖子并设置了适当的标志。 int flag = SOF_TIMESTAMPING
在unix系统上使用TCP套接字,python似乎完全忽略了我的ancbufsize。 data, ancdata, msg_flags, address = sock.recvmsg(1, sock
我必须使用 recvfrom() 从多个接口(interface)接收(在编译时未知,并且还需要保留消息的确切顺序,而不是使用单独的系统调用从每个接口(interface)接收反过来),但我还需要访问
我在 Linux 中有一个使用 C 的应用程序,其中我创建了一个套接字来接收 IPv6 UDP 数据包。 为了接收数据包,我使用了 recvmsg(),因为我需要检索 ifindex,我可以使用选项
在使用 recvmsg 时,我使用 MSG_TRUNC 和 MSG_PEEK,如下所示: msgLen = recvmsg(fd, &hdr, MSG_PEEK | MSG_TRUNC) 这给出了为下
我正在使用 UDP 的 Haskell 中编写一个隧道应用程序。为了让它“正确”,我想适本地设置 MTU。但是,我找不到任何简单的方法来做到这一点。 haskell 中是否有一个 recvmsg()
我在 CentOS 6.5 上,内核版本为 kernel-2.6.32-431.el6。 我试图找到 recvmmsg() 的实现,希望我没有看错源代码 ~/rpmbuild/BUILD/kernel
我是一名优秀的程序员,十分优秀!