在Python中的UDP套接字上接收ICMP主机无法访问消息

时间:2013-02-23 02:56:50

标签: python linux sockets udp icmp

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

如果主机(客户端)在发送UDP段(例如无法访问的服务器)时收到ICMP错误消息,该怎么办?

我试过

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

socket 模块中未定义 socket.IP_RECVERR

我尝试在sockFd.recvfrom上使用超时并再次执行 sendto ,但这没有用。是否有API来读取主机收到的ICMP错误?

2 个答案:

答案 0 :(得分:2)

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

常数IP_RECVERR在" IN"中定义。模块,所以下一个语句应该完成这项工作:

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

答案 1 :(得分:-2)

ICMP错误基本上没用。如果收到错误,则无法确保另一端未收到该数据包。如果您没有收到错误,则无法确保另一端确实收到了数据包。所以几乎没有理由去做这件事。

如果您告诉我们您认为需要这样做的原因,我们可以告诉您应该做些什么。