Tutti hanno ragione. Tuttavia, se sei anche impegnato a testare il tuo codice da solo l'applicazione potrebbe ancora "possedere" il socket se si avvia e si arresta in tempi relativamente brevi. Prova SO_REUSEADDR come opzione socket:
Cosa fa esattamente SO_REUSEADDR?
Questa opzione socket dice al kernel che anche se questa porta è occupata (nello stato TIME_WAIT), vai avanti e riutilizzala comunque. Se è occupato, ma con un altro stato, otterrai comunque un indirizzo già in errore utente. È utile se il tuo server è stato spento e poi riavviato subito mentre i socket sono ancora attivi sulla sua porta. Dovresti essere consapevole che se arrivano dati imprevisti, potrebbero confondere il tuo server, ma sebbene ciò sia possibile, non è probabile.
È stato sottolineato che "Un socket è una 5 tupla (proto, localaddr, local port, remote addr, remote port). SO_REUSEADDR dice semplicemente che puoi riutilizzare gli indirizzi locali. La 5 tupla deve comunque essere unica!" di Michael Hunter ([email protected]). Questo è vero, ed è per questo che è molto improbabile che dati imprevisti vengano mai visti dal tuo server. Il pericolo è che una tale tupla di 5 stia ancora fluttuando sulla rete, e mentre rimbalza, una nuova connessione dallo stesso client, sullo stesso sistema, capita di ottenere la stessa porta remota. Questo è spiegato da Richard Stevens in ``2.7 Per favore, spiega lo stato TIME_WAIT.''.
Hai un processo che sta già utilizzando quella porta. netstat -tulpn
consentirà di trovare l'ID del processo che sta utilizzando una particolare porta.