LINUX tcp server空闲超时的问题

保活定时器可以实现当套接字空闲的时候就发送心跳包这种机制我现在想,一个服务器连接多个客户端,当客户端连接上服务器但是一段时间内没有数据传输的话,就close掉这个sock... 保活定时器可以实现当套接字空闲的时候就发送心跳包这种机制

我现在想,一个服务器连接多个客户端,当客户端连接上服务器但是一段时间内没有数据传输的话,就close掉这个socket,而不是保持连接,该如何实现?
展开
 我来答
verylcg
2011-11-24
知道答主
回答量:13
采纳率:0%
帮助的人:7.4万
展开全部
收到心跳报文,更新你客户端链表中的m_time
/* 例如10妙发送一次 */
用户->m_time = (time_t)time(NULL);// time_t m_time

用一个独立线程检测是否超时
while (1) {
sleep(你定时检测心跳的时间);
time_t local_time = (time_t)time(NULL);

/*遍历你的现有用户*/

/* 例如 你的超时时间为40,那么就是你至少4次没收到心跳更新可以肯定需要断开连接了*/
if (( local_time - 用户->m_time) > 超时时间){
close (用户->sockfd);
}
}
还有疑问么?
fenghuaster
2011-11-12 · TA获得超过426个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:256万
展开全部
你可以判读socket是否是可写或者可读的状态,如果都不是,就证明socket空闲着。
比如间隔一个非常小的时间来判断,判断一定次数后,就关闭这个socket。
用poll很好实现,你可查询poll的用法。

以上如果对你有帮助,给分哦,谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式