网络socket通信中如何判断对方是否断开

发布时间 2023-04-02 17:12:52作者: 面筋玄师
  • 写网络socket通信的时候我们有时候需要判断对方是否断开

 除了select函数,io操作,还可以通过tcp_info结构体实现:

  //(需要头文件:#include <netinet/tcp.h>)

  struct tcp_info tcp_info;

       int tcp_len = sizeof(tcp_info);

  函数:  getsockopt(fd,IPPROTO_TCP,TCP_INFO,&tcp_info,(socklen_t*)&tcp_len);

  fd参数为正在通信的文件描述符

  如果对方主动关闭连接,或者网络异常导致连接中断,我方的状态就会变成CLOSE_WAIL

  因此可以通过这个判断

  if (tcpinfo.tcpi_state  == TCP_CLOSE_WAIT)

  {

              /*codes*/

  }

  ///////////////////////////////////////////////////////////////////////////

  tcpinfo.tcpi_state  == TCP_CLOSE_WAIT  //说明对方已经断开连接。

  •  

  ESTABLISHED  状态:表明正在通信

  TIME_WAIT 状态:我方主动调用close()断开连接后,收到对方确认后状态变成TIME_WAIT