3

Linux2.6.38上のPython2.7で簡単なUDPチャットサーバーを作成しています。

ホスト(クライアント)がUDPセグメントを送信して到達不能サーバーと言うときに受信するICMPエラーメッセージをどのように読み取ることができますか?

私は試した

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

ただし、socket.IP_RECVERRソケットモジュールで定義されていません。

sockFd.recvfromでタイムアウトを使用して、もう一度sendtoを実行しようとしましたが、それは役に立ちませんでした。ホストが受信したICMPエラーを読み取るためのAPIはありますか?

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 に答える