Alle haben Recht. Wenn Sie jedoch auch damit beschäftigt sind, Ihren Code zu testen, Ihren eigenen Die Anwendung "besitzt" möglicherweise immer noch den Socket, wenn sie relativ schnell startet und stoppt. Versuchen Sie SO_REUSEADDR als Socket-Option:
Was genau macht SO_REUSEADDR?
Diese Socket-Option teilt dem Kernel mit, dass er, selbst wenn dieser Port belegt ist (im Zustand TIME_WAIT), trotzdem weitermachen und ihn wiederverwenden soll. Wenn es beschäftigt ist, aber einen anderen Status hat, erhalten Sie immer noch eine Adresse, die sich bereits in einem Benutzerfehler befindet. Es ist nützlich, wenn Ihr Server heruntergefahren und sofort neu gestartet wurde, während noch Sockets auf seinem Port aktiv sind. Sie sollten sich darüber im Klaren sein, dass das Eintreffen unerwarteter Daten Ihren Server verwirren kann, aber obwohl dies möglich ist, ist es nicht wahrscheinlich.
Es wurde darauf hingewiesen, dass "ein Socket ein 5-Tupel ist (proto, localaddr, local port, remote addr, remote port). SO_REUSEADDR sagt nur, dass Sie lokale Adressen wiederverwenden können. Das 5-Tupel muss immer noch eindeutig sein!" von Michael Hunter ([email protected]). Dies ist wahr, und deshalb ist es sehr unwahrscheinlich, dass unerwartete Daten jemals von Ihrem Server gesehen werden. Die Gefahr besteht darin, dass ein solches 5-Tupel immer noch im Netz herumschwirrt, und während es herumhüpft, erhält eine neue Verbindung vom selben Client auf demselben System zufällig denselben entfernten Port. Dies wird von Richard Stevens in ``2.7 Pleaseexplain the TIME_WAIT state.'' erklärt.
Sie haben einen Prozess, der diesen Port bereits verwendet. netstat -tulpn
ermöglicht es einem, die Prozess-ID zu finden, die einen bestimmten Port verwendet.