3

我正在 Linux 2.6.38 上的 Python 2.7 中编写一个简单的 UDP 聊天服务器。

如何读取主机(客户端)在发送 UDP 段以表示无法访问的服务器时收到的 ICMP 错误消息?

我试过了

sockFd.setsockopt( socket.IPPROTO_IP, socket.IP_RECVERR, 1 ) 

但是socket.IP_RECVERR没有在socket模块中定义。

我尝试在 sockFd.recvfrom 上使用超时并再次发送到,但这没有帮助。是否有 API 可以读取主机收到的 ICMP 错误?

4

2 回答 2

2

这个问题有点老了,但我会回答,因为我遇到了同样的问题。

该常量IP_RECVERR在“IN”模块中定义,因此下一条语句应该完成这项工作:

import socket
import IN
sockFd.setsockopt( socket.IPPROTO_IP, IN.IP_RECVERR, 1 )
于 2015-08-28T15:15:35.230 回答
-2

ICMP 错误基本上是无用的。如果你收到一个错误,那并不能保证另一端没有收到数据包。如果您没有收到错误,则不能确保另一端确实收到了数据包。所以几乎没有理由费心去做这件事。

如果您告诉我们更多关于您认为需要这样做的原因,我们可以告诉您应该怎么做。

于 2013-02-23T03:05:23.607 回答