-
写网络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