Ich bin auch auf das gleiche Problem gestoßen. Das liegt daran, dass Sie Ihre Verbindung zum Socket schließen, aber nicht den Socket selbst. Der Socket kann in einen TIME_WAIT-Zustand eintreten (um sicherzustellen, dass alle Daten übertragen wurden, garantiert TCP die Lieferung, wenn möglich) und bis zu 4 Minuten für die Freigabe benötigen.
oder, für eine WIRKLICH detaillierte/technische Erklärung, überprüfen Sie diesen Link
Es ist sicherlich ärgerlich, aber es ist kein Fehler. Siehe den Kommentar von @Vereb zu dieser Antwort unten zur Verwendung von SO_REUSEADDR
.
Versuchen Sie netstat so:netstat -ntp
, ohne -l
. Die TCP-Verbindung wird in TIME_WAIT
angezeigt Zustand.
Ich weiß, es ist eine Weile her, seit die Frage gestellt wurde, aber ich konnte eine Lösung finden:
int sockfd;
int option = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
Dadurch kann der Socket sofort wiederverwendet werden.
Ich entschuldige mich, wenn das "falsch" ist. Ich bin nicht sehr erfahren mit Sockets