Anch'io ho riscontrato lo stesso problema. È perché stai chiudendo la tua connessione al socket, ma non il socket stesso. Il socket può entrare in uno stato TIME_WAIT (per garantire che tutti i dati siano stati trasmessi, TCP garantisce la consegna se possibile) e impiegare fino a 4 minuti per il rilascio.
oppure, per una spiegazione DAVVERO dettagliata/tecnica, controlla questo link
È certamente fastidioso, ma non è un bug. Vedi il commento di @Vereb su questa risposta di seguito sull'uso di SO_REUSEADDR
.
Prova netstat in questo modo:netstat -ntp
, senza -l
. Mostrerà la connessione tcp in TIME_WAIT
stato.
So che è passato un po' di tempo dall'ultima volta che la domanda è stata posta, ma sono riuscito a trovare una soluzione:
int sockfd;
int option = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
Questo imposta il socket in grado di essere riutilizzato immediatamente.
Mi scuso se questo è "sbagliato". Non ho molta esperienza con i socket