J'ai également rencontré le même problème. C'est parce que vous fermez votre connexion au socket, mais pas le socket lui-même. Le socket peut entrer dans un état TIME_WAIT (pour s'assurer que toutes les données ont été transmises, TCP garantit la livraison si possible) et prendre jusqu'à 4 minutes pour se libérer.
ou, pour une explication VRAIMENT détaillée/technique, consultez ce lien
C'est certes gênant, mais ce n'est pas un bug. Voir le commentaire de @Vereb sur cette réponse ci-dessous sur l'utilisation de SO_REUSEADDR
.
Essayez netstat comme ceci :netstat -ntp
, sans le -l
. Il affichera la connexion tcp en TIME_WAIT
état.
Je sais que cela fait un moment que la question n'a pas été posée, mais j'ai pu trouver une solution :
int sockfd;
int option = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
Cela définit la socket pouvant être réutilisée immédiatement.
Je m'excuse si c'est "faux". Je ne suis pas très expérimenté avec les sockets