Méthode de Golang pour déterminer si TCP est déconnecté :
détection keepalive Pour les paramètres keepalive, lorsque TCP détecte que le socket homologue n'est plus disponible (il ne peut pas envoyer de message). paquet de détection, ou le paquet de détection ne reçoit pas de paquet de réponse ACK), select renverra que le socket est lisible, renverra -1 pendant la réception et définira errno sur ETIMEDOUT. A ce moment, l'état de TCP est déconnecté.
struct TCP_KEEPALIVE { unsigned long onoff; unsigned long keepalivetime; unsigned long keepaliveinterval; } ; #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) /* KeepAlive实现 */ void set_keepalive (SOCKET s) { BOOL bKeepAlive = TRUE; int nRet = ::setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char*)&bKeepAlive, sizeof(bKeepAlive)); if (nRet == SOCKET_ERROR) { return ; } /* 输入参数 */ struct TCP_KEEPALIVE inKeepAlive = {0}; unsigned long ulInLen = sizeof(struct TCP_KEEPALIVE); /* 输出参数 */ struct TCP_KEEPALIVE outKeepAlive = {0}; unsigned long ulOutLen = sizeof(struct TCP_KEEPALIVE); unsigned long ulBytesReturn = 0; int ret = 0; /* 设置keepalive 为5秒,并且发送次数为3次 */ inKeepAlive.onoff = 1; /* 2次keepalive探测间隔时间 */ inKeepAlive.keepaliveinterval = 5000; /* 开始首次keepalive探测前的tcp空闲时间 */ inKeepAlive.keepalivetime = 5000; ret = WSAIoctl((unsigned int)s, SIO_KEEPALIVE_VALS, (LPVOID)&inKeepAlive, ulInLen, (LPVOID)&outKeepAlive, ulOutLen, &ulBytesReturn, NULL, NULL); if (ret == SOCKET_ERROR) { printf ("error: %d\n", WSAGetLastError()); } }
Pour plus de connaissances sur le golang, veuillez faire attention à la colonne tutoriel golang.
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!