2010-12-31 4 views
0

also .. Ich mache ein kleines Multiplayer-Spiel mit Blockierung von UDP und IO.select. Zu meinem Problem .. (In dem Server) Lesen von einem UDP-Socket (packet, sender = @socket.recvfrom(1000)), die gerade ein Paket an einen toten Client gesendet haben, führt zu einem ICMP nicht erreichbar (und Ausnahme Errno::ECONNRESET in Ruby). Das Problem ist, dass ich keinen Weg finden kann, die IP des ICMP zu extrahieren. So kann ich diesen toten Client entfernen.Wie bekomme ich die IP von eingehenden ICMP aufgrund UDP-send an tote Client in Ruby?

Wer weiß, wie man das erreicht?

dank

Antwort

1

Sie benötigen recvmsg für die Steckdose zu nennen, und MSG_ERRQUEUE wie die Flagge übergeben.

Die ursprüngliche Zieladresse des Datagramms, das den Fehler verursacht hat, wird über msg_name bereitgestellt.

0

Es ist erwähnenswert, dass die Quell-IP-Adresse des ICMP-Pakets nicht immer dieselbe Adresse wie Ihr Client ist. Jeder Router, der Pakete für diese Verbindung verarbeitet, könnte die Quelle sein, und die Nutzlast des ICMP-Pakets würde den IP-Header + die ersten 8 Bytes des Pakets enthalten, auf das es sich bezieht.

Verwandte Themen