Comment utiliser setsockopt et getsockopt dans la programmation linux c pour déterminer une connexion tcp/ip interrompue ?
Réponses
Trop de publicités?A partir de la Page de manuel TCP :
Pour définir ou obtenir une option de socket TCP, appelez
getsockopt(2)
lire ousetsockopt(2)
pour écrire l'option avec l'argument du niveau de l'option fixé àIPPROTO_TCP
.
Voici les options possibles :
TCP_KEEPCNT
(depuis Linux 2.4)
Nombre maximal de sondes keepalive que TCP doit envoyer avant d'abandonner la connexion. Cette option ne doit pas être utilisée dans un code destiné à être portable.
TCP_KEEPIDLE
(depuis Linux 2.4)
Le temps (en secondes) dont la connexion a besoin pour rester inactive avant que TCP ne commence à envoyer des sondes keepalive, si l'option de socket SO_KEEPALIVE a été définie sur cette socket. Cette option ne doit pas être utilisée dans un code destiné à être portable.
TCP_KEEPINTVL
(depuis Linux 2.4)
Le temps (en secondes) entre les sondes keepalive individuelles. Cette option ne doit pas être utilisée dans un code destiné à être portable.
Exemple :
int keepcnt = 5;
int keepidle = 30;
int keepintvl = 120;
setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(int));
setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(int));
setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(int));
L'utilisation de l'option de socket SO_KEEPALIVE peut être utile. Code de l'APUE :
int keepalive = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive , sizeof(keepalive ));
Et de faire référence à ceci : Détection d'une rupture d'emboîture
Comme l'ont répondu @luly et @jxh, vous devez tout d'abord activer le keep-alive en paramétrant SO_KEEPALIVE. Ensuite, contrôlez le intervalle du rythme cardiaque normal en utilisant TCP_KEEPIDLE, intervalle des battements de cœur anormaux (non reconnus) en utilisant TCP_KEEPINTVL, et seuil de battements cardiaques anormaux en utilisant TCP_KEEPCNT.
Pour détecter une rupture de connexion, ces options doivent être définies à partir de l'onglet côté serveur .
Une explication détaillée est disponible à l'adresse suivante ici