Liberación de puertos vinculados en la salida del proceso

¿Cómo me aseguro de que un socket vinculado a un puerto se libere correctamente en la salida del proceso de modo que el puerto pueda reutilizarse sinbind() fallando con EADDRINUSE? He escrito un pequeño programa que solo crea un socket, lo vincula a un puerto fijo, espera una conexión y luego termina inmediatamente. Cuando vuelvo a ejecutar el programa, labind() call falla con EADDRINUSE, pero si espero unos minutos, tiene éxito.

¿Hay alguna manera de que pueda "desvincular" explícitamente el socket, liberando así el número de puerto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta