废话不多说,直接上代码
代码实现
int lSockFd = searchHelper->GetFd();
fd_set read_set;
struct timeval t_o;
FD_ZERO(&read_set);
FD_SET(lSockFd, &read_set);
t_o.tv_sec = 1;/* 超时秒数*/
int ret = select(lSockFd + 1, &read_set, NULL, NULL, &t_o);
char buf[100] = {0};
if(ret == 1) {
if(FD_ISSET(lSockFd, &read_set) ){
count = recv(lSockFd, buf, 100, 0);
if((count == 0)||(count == -1))
{
/* 这两种情况都可认为是链路关闭*/
searchHelper->Reconnect();
}
}
}
以上代码可以用于判断tcp长连接是否有效,因为server端关闭tcp连接后client端无法感知,可以通过select+recv的方式进行检测并尝试重连。
在发送数据之前检测的目的是保证这次发收数据不会因为对方断开连接而接收数据失败(对方断开连接,发送还是会成功的)。
本文介绍了如何通过代码实现使用select和recv判断TCP连接是否有效,并在断开时进行自动重连,确保数据传输的可靠性。

780

被折叠的 条评论
为什么被折叠?



