venez ici

Détecter la fermerture d’une socket sans lire les données en attente

J’ai récemment été confronté à la problématique de devoir détecter (dans une application C sous Linux) si une socket employée avait été fermée sans être obligé de lire les données en attente dans celle-ci.

Il n’existe (à ma connaissance) aucun moyen portable de réaliser cela. Mais Linux offre (via l’appel getsockopt) la possibilité de consulter la structure tcp_info du noyau (voir /usr/include/linux/tcp.h). Voici comment le test a été réalisé:

struct tcp_info info;
socklen_t len = sizeof(info);
if (getsockopt(remote_s, SOL_TCP, TCP_INFO, &info, &len) != -1) {
    if (info.tcpi_state == TCP_CLOSE ||
        info.tcpi_state == TCP_CLOSE_WAIT ||
        info.tcpi_state == TCP_CLOSING) {
                [... do what you want here ...]
    }
}
Partagez cet article / Share This

Tags:

Laisser un commentaire


Close
E-mail It