TCP 长连接--客户端用select检测是否与服务器断开

本文介绍了如何通过代码实现使用select和recv判断TCP连接是否有效,并在断开时进行自动重连,确保数据传输的可靠性。

废话不多说,直接上代码

代码实现

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的方式进行检测并尝试重连。

在发送数据之前检测的目的是保证这次发收数据不会因为对方断开连接而接收数据失败(对方断开连接,发送还是会成功的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值