que - crear reglas de entrada y salida firewall windows 10
Cómo evitar que los puertos de red se dejen abiertos al bloquearse el programa (3)
Supongo que el programa que está escribiendo es un servidor, por lo que debe usar un puerto conocido. Si ese es el caso, debe usar la opción SO_REUSE_ADDR en el socket como lo señaló Cogsy.
Si, por otro lado, está escribiendo un cliente sw, entonces debe evitar elegir un puerto en particular, permitiendo que el sistema le proporcione uno aleatorio.
Tomé Computer Networking el semestre pasado e hice algo de programación en C en linux (usando gcc) para mis proyectos. Una cosa extremadamente tediosa que me encontré fue si mi programa se bloqueaba o se detenía (que luego tendría que presionar Ctrl + C para matarlo), el puerto de red aún se mantendría abierto durante un minuto más o menos. Entonces, si quisiera volver a ejecutar el programa de inmediato, tendría que ir primero al archivo de encabezado, cambiar el puerto, rehacer el programa y finalmente ejecutarlo. Obviamente, esto se vuelve muy tedioso muy rápido.
¿Hay alguna forma de configurarlo donde el puerto se libera inmediatamente tan pronto como se mata el proceso? Ya sea a través de alguna configuración en Linux, o en el archivo MAKE para mi programa, o incluso programáticamente en C?
Editar: me refiero a cuando escribo un servidor y elijo un puerto específico para alojar el programa.
Establezca la opción SO_REUSEADDR
en el socket.
int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
Apuesto a que son aproximadamente dos minutos :) Como observó @Cogsy, la SO_REUSEADDR
socket SO_REUSEADDR
es tu amiga. Familiarícese con los estados TCP, es el estado TIME_WAIT
que le causa problemas: