套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。

方法一:

当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。

方法二:

  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 断开

方法三:

若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。

法四:

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

设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误

更多golang知识请关注PHP中文网golang教程栏目。

更多相关文章

  1. Go语言中处理json数据的方法
  2. go语言结构体组合函数介绍
  3. golang错误抛出的方法
  4. Go语言异常处理的方法介绍
  5. golang使用protobuf的方法详解
  6. golang解决中文乱码的方法
  7. golang判断错误类型的方法
  8. 安装go第三方库的方法
  9. Go语言中操作MySQL数据库的方法

随机推荐

  1. 【实战】android获取天气情况(Json来返回
  2. Android 判断app是否在前台运行
  3. android 底部菜单写法之FragmentTabHost
  4. GreenDao
  5. Android关机AppWidget的实现
  6. Android产生一个提示框
  7. Android 开发之 定时器 Handler + Runnab
  8. android百度地图 覆盖物弹出层效果
  9. Android5.0挂载子系统
  10. Android之Selector、Shape介绍