• # fermer le port dans l'appli en attrapant l'erreur

    Posté par . En réponse au message Controle Port TCP ouvert sous debian. Évalué à 1.

    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.