- 判断recv函数的返回值,小于等于0代表有问题,此时判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。如果使用select函数,则先判断select()函数是否返回0
与四次挥手有关,在收到客户端发送的FIN信号后就会通知read函数 - 使用getsockopt函数判断
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED))
{
myprintf("socket connected\n");
return 1;
}
else
{
myprintf("socket disconnected\n");
return 0;
}