Intenté vincular mi socket (servidor) al número de puerto 8000
. Funcionó e hizo el trabajo por mí. Al final del código también cierro el socket. El siguiente instante corro mi código nuevamente y me muestra que la dirección ya está en uso. He impreso el significado de los valores de error strerror(errno);
para ver si mi código funciona correctamente en cada punto. Para comprobar si el puerto es libre, lo comprobé usando netstat
pero muestra que el número de puerto 8000
es gratuito. Me ha sucedido muchas veces. Cada vez que espero unos segundos más y luego vuelve a funcionar. Estoy usando el lenguaje c Entonces, ¿cuál es la razón de este comportamiento por mi sistema operativo?Error: La dirección ya está en uso mientras se vincula el socket con la dirección pero el número de puerto se muestra gratis con `netstat`
Después de algunos segundos más, ejecuto el código y luego funciona.
[email protected]:~/Desktop/testing$ sudo ./a.out
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
[email protected]:~/Desktop/testing$ sudo netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1348/lighttpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 984/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1131/cupsd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1211/mysqld
tcp6 0 0 :::22 :::* LISTEN 984/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1131/cupsd
[email protected]:~/Desktop/testing$ sudo ./a.out
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
[email protected]:~/Desktop/testing$
gracias por la respuesta con enlaces para satisfacer mi consulta. – Durin
existe una posible solución en la página que vinculó. Puede usar la opción SO_REUSEADDR para el socket. vea setsockopt aquí: http://linux.die.net/man/3/setsockopt – Vereb
"no hay manera de evitarlo y no es un error", le gustó: P –