Maison > développement back-end > Golang > Comment déterminer si le socket est fermé dans Golang

Comment déterminer si le socket est fermé dans Golang

Libérer: 2020-01-13 10:44:50
original
3959 Les gens l'ont consulté

Comment déterminer si le socket est fermé dans Golang

Un socket est une couche d'abstraction à travers laquelle les applications peuvent envoyer ou recevoir des données et peuvent ouvrir, lire, écrire et fermer des opérations telles que des fichiers.

Méthode 1 :

Lorsque la valeur de retour de recv() est inférieure ou égale à 0, la connexion socket est déconnectée. Cependant, il est également nécessaire de déterminer si errno est égal à EINTR. Si errno == EINTR, cela signifie que la fonction recv revient après que le programme a reçu le signal, et que la connexion socket est toujours normale et que la connexion socket ne doit pas être. fermé.

Méthode 2 :

  struct tcp_info info; 
  int len=sizeof(info); 
  getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
  if((info.tcpi_state==TCP_ESTABLISHED))  则说明未断开  else 断开
Copier après la connexion

Méthode 3 :

Si des fonctions système telles que select sont utilisées, si l'extrémité distante est déconnectée, select renvoie 1 et recv renvoie 0 pour se déconnecter . Les autres précautions sont les mêmes que celles de la loi 1.

Méthode 4 :

int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
Copier après la connexion

Après le réglage, s'il est déconnecté, la lecture et l'écriture à l'aide du socket échoueront immédiatement et renverront l'erreur ETIMEDOUT

Pour plus de connaissances sur Golang, veuillez payer attention à la colonne tutoriel golang du site Web PHP chinois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal