golang判断tcp是否断开的方法:

keepalive检测,对于设置了keepalive来说,当tcp检测到对端socket不再可用时(不能发出探测包,或探测包没有收到ACK的响应包),select会返回socket可读,并且在recv时返回-1,同时置上errno为ETIMEDOUT。此时TCP的状态是断开的。

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());      }  }

更多golang知识请关注golang教程栏目。

更多相关文章

  1. golang如何传不定参数
  2. golang不定长参数写法
  3. Go命令行参数及标准输入输出介绍
  4. Golang如何接收前端的参数
  5. 用XsltArgumentList实现xsl的参数调用
  6. 啥?听说你还在手写复杂的参数校验?
  7. 芋道 Spring Boot 参数校验 Validation 入门
  8. yarn-site.xml的部分资源配置参数,主要是与内存相关
  9. 决战紫禁之巅 | sklearn参数介绍及使用

随机推荐

  1. 【Android(安卓)Native Code开发系列】三
  2. Android Toast 使用总结
  3. 创建 cocos2d-x+lua for android 步骤
  4. Must specify unique android:id, androi
  5. android 中超出屏幕宽度的字符 省略号显
  6. Android中手机声音调节步骤(Android学习随
  7. 面试题5:椭圆里面有个内切圆,内切圆中有文
  8. AndroidVirtual Devices (AVD)创建、设置
  9. Android 8.1 关机充电动画(三)Android模式
  10. Android FDE 加密过程