Me he encontrado con el mismo problema también. Es porque está cerrando su conexión al socket, pero no al socket en sí. El socket puede entrar en un estado TIME_WAIT (para garantizar que se hayan transmitido todos los datos, TCP garantiza la entrega si es posible) y tardar hasta 4 minutos en liberarse.
o, para una explicación REALMENTE detallada/técnica, consulte este enlace
Ciertamente es molesto, pero no es un error. Vea el comentario de @Vereb sobre esta respuesta a continuación sobre el uso de SO_REUSEADDR
.
Prueba netstat así:netstat -ntp
, sin el -l
. Mostrará la conexión tcp en TIME_WAIT
estado.
Sé que ha pasado un tiempo desde que se hizo la pregunta, pero pude encontrar una solución:
int sockfd;
int option = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
Esto hizo que el zócalo se pueda reutilizar inmediatamente.
Me disculpo si esto es "incorrecto". No tengo mucha experiencia con enchufes