¿Cómo me aseguro de que un socket vinculado a un puerto se libera correctamente en la salida del proceso de modo que el puerto pueda reutilizarse sin bind()
que falla con EADDRINUSE? He escrito un pequeño programa que simplemente crea un socket, lo vincula a un puerto fijo, espera una conexión y luego termina inmediatamente. Cuando vuelvo a ejecutar el programa, la llamada bind()
falla con EADDRINUSE, pero si espero unos minutos, tiene éxito.Liberación de puertos vinculados en la salida de proceso
¿Hay alguna manera de poder "desvincular" explícitamente el socket, liberando así el número de puerto?
Pero tenga en cuenta que, técnicamente, el uso de SO_REUSEADDR infringe el protocolo TCP/IP, posibilitando (aunque poco probable) que el próximo programa que vincula ese puerto recoja los paquetes destinados al programa original. –
Excelente, exactamente lo que estaba buscando. – JesperE