diferencia entre "dirección en uso" con bind () en Windows y en Linux - errno = 98

Tengo un pequeño servidor TCP que escucha en un puerto. Durante la depuración, es común para mí CTRL-C el servidor para matar el proceso.

En Windows, puedo reiniciar el servicio rápidamente y el socket puede recuperarse. En Linux tengo que esperar unos minutos antes de que bind () regrese con éxito

Cuando bind () falla, devuelve errno = 98, dirección en uso.

Me gustaría entender mejor las diferencias en las implementaciones. Windows seguro es más amigable para el desarrollador, pero dudo que Linux esté haciendo "algo incorrecto".

Mi mejor conjetura es que Linux está esperando hasta que todos los clientes posibles hayan detectado que el socket anterior está roto antes de permitir que se creen nuevos sockets. La única forma de hacerlo es esperar a que se agote el tiempo de espera.

¿Hay alguna manera de cambiar este comportamiento durante el desarrollo en Linux? Espero duplicar la forma en que Windows hace esto

Respuestas a la pregunta(1)

Su respuesta a la pregunta