2014-05-09 5 views
6

Nehmen wir an, ich habe einen UDP-Socket, der auf einer bestimmten Adresse/Port geöffnet und dann gehängt wurde. Wenn ich versuche, einen neuen UDP-Socket (UDPClient) an derselben Adresse/diesem Port zu initialisieren, wird natürlich eine SocketException ausgelöst, da festgestellt wird, dass sie bereits verwendet wird.Killing einen blockierten UDP-Socket

Ist es möglich, den gehängten Sockel aus dem Code zu töten, damit ich ihn wiederverwenden kann?

EDIT: Hier ist der Code verursacht die UDP (Apparently) Gracefully Closed UDPClient leaves the socket blocked

+1

Nicht, dass ich bewusst bin. In diesem Fall sollten Sie normalerweise eine Zeitüberschreitung für die Verbindung festlegen. Alternativ gibt es potentielle Probleme damit, es konsistent zu machen, wenn der alte Socket wiederhergestellt wird, aber Sie können '.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)' aufrufen, bevor Sie sich mit einem neuen Socket verbinden. –

+1

Haben Sie versucht, es zu schließen? –

+0

Sie könnten einige 'beenden' Flag setzen und dann senden Sie den Port ein Datagramm selbst, um die Blockierung readFrom(), oder was auch immer, zurückzukehren. –

Antwort

0

blockiert bleiben Sie die ReuseAddress Socket-Option in den Sockel, so dass sie auf der gleichen IP & Port auf einer anderen Steckdose zu hören.

+0

Versuchte das, hat nicht funktioniert. –