Todo el mundo tiene razón. Sin embargo, si también está ocupado probando su código propio la aplicación aún podría "poseer" el socket si se inicia y se detiene con relativa rapidez. Prueba SO_REUSEADDR como opción de socket:
¿Qué hace exactamente SO_REUSEADDR?
Esta opción de socket le dice al kernel que incluso si este puerto está ocupado (en el estado TIME_WAIT), continúe y reutilícelo de todos modos. Si está ocupado, pero con otro estado, seguirá recibiendo un error de dirección que ya está en uso. Es útil si su servidor se apagó y luego se reinició de inmediato mientras los sockets aún estaban activos en su puerto. Debe tener en cuenta que si ingresa algún dato inesperado, puede confundir a su servidor, pero si bien esto es posible, no es probable.
Se ha señalado que "Un socket es una tupla de 5 (proto, dirección local, puerto local, dirección remota, puerto remoto). SO_REUSEADDR simplemente dice que puede reutilizar direcciones locales. ¡La tupla de 5 debe ser única!" por Michael Hunter ([email protected]). Esto es cierto, y por eso es muy poco probable que su servidor vea datos inesperados. El peligro es que una tupla de 5 todavía está flotando en la red, y mientras rebota, una nueva conexión del mismo cliente, en el mismo sistema, obtiene el mismo puerto remoto. Esto lo explica Richard Stevens en ``2.7 Explique el estado TIME_WAIT''.
Tiene un proceso que ya está usando ese puerto. netstat -tulpn
permitirá encontrar el ID de proceso que está utilizando un puerto en particular.