0

そう..私はUDPとIO.selectをブロックする小さなマルチプレイヤーゲームをやっています。私の問題に..(サーバーで)packet, sender = @socket.recvfrom(1000)死んだクライアントにパケットを送信したばかりのUDPソケット()から読み取ると、ICMPに到達できなくなります(そしてErrno::ECONNRESETrubyでは例外になります)。問題は、そのICMPのIPを抽出する方法がまったく見つからないことです。そのため、その死んだクライアントをクリーンアップできます。

誰もがこれを達成する方法を知っていますか?

ありがとう

4

2 に答える 2

1

recvmsgソケットを呼び出してMSG_ERRQUEUE、フラグとして渡す必要があります。

エラーの原因となったデータグラムの元の宛先アドレスは、msg_nameを介して提供されます。

于 2010-12-31T02:51:47.557 に答える
0

ICMP パケットの送信元 IP アドレスが常にクライアントと同じであるとは限らないことに注意してください。この接続のパケットを処理する任意のルーターが送信元になる可能性があり、ICMP パケットのペイロードには、IP ヘッダーと関連するパケットの最初の 8 バイトが含まれます。

于 2011-01-01T18:33:12.480 に答える