Bei der Bindung einer client-TCP-socket an einen bestimmten lokalen port mit Winsock, SO_REUSEADDR hat keine Wirkung

Bin ich verbindlich eine client TCP-socket an einen bestimmten lokalen port. Zu handle die situation, wo der sockel bleibt in TIME_WAIT Zustand für einige Zeit, ich setsockopt() mit SO_REUSEADDR auf einem sockel.

Es funktioniert auf Linux, aber funktioniert nicht auf Windows, ich bekomme WSAEADDRINUSE auf connect() rufen, wenn die Vorherige Verbindung ist immer noch in TIME_WAIT.

MSDN ist nicht genau klar, was passieren sollte mit client-sockets:

[...] Für server-Anwendungen, die Notwendigkeit zu binden, die mehrere sockets an dieselbe port-Nummer, sollten Sie die Verwendung setsockopt (SO_REUSEADDR). Client-Anwendungen benötigen in der Regel keine call-bind-an all—connect wählt automatisch einen nicht verwendeten Anschluss. [...]

Wie kann ich diese vermeiden?

Können Sie uns sagen, warum würden Sie wollen, binden Sie ein client-socket an einen port?
es ist eine Anforderung von dem externen system ich bin die Anbindung, und die ist unmöglich zu vermeiden.
können Sie gemeinsam einen funktionierenden code Stück für die Bindung an einen client-socket auf Linux?
meine Frage: stackoverflow.com/questions/4711608/...

InformationsquelleAutor Alex B | 2010-04-09

Schreibe einen Kommentar