使用阻塞式socket发送和接受数据,但是由于没有建立心跳机制,远端服务器在一定时间内(系统设定)没有活动数据,就会断开连接。
无奈只能在每次发送数据之前检测对方是否断开连接,当然在发送数据之前检测的目的是保证这次发收数据不会因为对方断开连接而接受数据失败(对方断开连接,发送还是会成功的)。这个方法比较挫~ 使用了select + recv
fd_set read_set;
struct timeval t_o;
FD_ZERO(&read_set);
FD_SET(lSockFd,&read_set);
t_o.tv_sec = n;/* 超时秒数*/
ret = select(lSockFd + 1,&read_set,NULL,NULL,&t_o);
if(ret == 1)
{
if(FD_ISSET(lSockFd,&read_set)
{
count = recv(lSockFd,buf,LEN,0);
if((count == 0)||(count == -1))
{
/* 这两种情况都可认为是链路关闭*/
}
}
转自:http://guaniuzhijia.blog.163.com/blog/static/16547206920105202242262/