2010-12-31 4 views
0

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

誰でもこれを達成する方法を知っていますか?あなたがソケットのrecvmsgを呼び出し、フラグとしてMSG_ERRQUEUEに合格する必要があります

おかげ

答えて

1

エラーの原因となったデータグラムの元の宛先アドレスはmsg_nameで指定します。

0

ICMPパケットの送信元IPアドレスが常にクライアントと同じアドレスになるとは限りません。この接続のためのパケットを扱うどのルータもソースであるかもしれません、そして、ICMPパケットのペイロードはIPヘッダー+それに関連するパケットの最初の8バイトを含みます。

関連する問題