在Python中UDP套接字接收ICMP主机不可达消息

3 投票
2 回答
3579 浏览
提问于 2025-04-17 16:50

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

我想知道,当一个主机(客户端)向一个不可达的服务器发送UDP数据包时,如何读取它收到的ICMP错误信息?

我试过

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

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

我还尝试在sockFd.recvfrom上设置超时,然后再用sendto发送一次,但这并没有解决问题。有没有什么API可以用来读取主机收到的ICMP错误?

2 个回答

-2

ICMP错误基本上没什么用。如果你收到一个错误信息,这并不代表对方没有收到数据包。相反,如果你没有收到错误信息,也不能保证对方一定收到了数据包。所以,几乎没有必要去关注这些错误。

如果你能告诉我们你为什么觉得需要这样做,我们可以给你一些更好的建议。

2

这个问题有点老了,但我还是想回答,因为我也遇到过同样的问题。

常量 IP_RECVERR 是在 "IN" 模块中定义的,所以接下来的语句应该可以解决这个问题:

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

撰写回答