Par défaut, quand un programme se termine sans fermer un port qu'il a ouvert, ce port reste dans un état intermédiaire (on le voit avec "netstat", il est en CLOSE_WAIT je crois) pendant une minute ou genre (c'est peut-être configurable dans le noyau).
Dans mes applis, j'ai rajouté ceci (quand c'est en C bien sûr) :
int serverSocket = 0; /* variable globale pour être accessible depuis le gestionnaire de signal ci-dessous */
void mysighandler(int mysig)
{
printf("myrcpd: signal %d received\n", mysig);
if (serverSocket) close(serverSocket);
exit(0);
}
[...]
signal(SIGINT, mysighandler);
signal(SIGTERM, mysighandler);
[...]
Ça me permet de tuer le démon via un kill/killall (SIGTERM) ou un ctrl-c (SIGINT) et de le relancer tout de suite sans souci.
# fermer le port dans l'appli en attrapant l'erreur
Posté par Olivier Jeannet . En réponse au message Controle Port TCP ouvert sous debian. Évalué à 1.
Dans mes applis, j'ai rajouté ceci (quand c'est en C bien sûr) :
int serverSocket = 0; /* variable globale pour être accessible depuis le gestionnaire de signal ci-dessous */
void mysighandler(int mysig)
{
printf("myrcpd: signal %d received\n", mysig);
if (serverSocket) close(serverSocket);
exit(0);
}
[...]
signal(SIGINT, mysighandler);
signal(SIGTERM, mysighandler);
[...]
Ça me permet de tuer le démon via un kill/killall (SIGTERM) ou un ctrl-c (SIGINT) et de le relancer tout de suite sans souci.