客户端网络socket判定超时(TCP)

本文探讨了基于TCP的客户端在阻塞和非阻塞模式下如何进行超时判断。在阻塞模式下,通过setsockopt设置SO_SNDTIMEO和SO_RCVTIMEO来控制超时。对于非阻塞socket,利用select模型结合自定义时间进行主动通知,以避免过度轮询造成的资源浪费。总结中指出,最佳的客户端超时方案是阻塞模式下使用setsockopt,非阻塞模式下结合select进行处理,而在实际应用中,非阻塞+线程+select的组合更为常见。
摘要由CSDN通过智能技术生成

网络socket是整个传输层的基础,几乎所有的应用层协议都要经过该层来传输。下面以基于TCP的客户端在阻塞与非阻塞两个模式下的超时判断。

一、阻塞socket
采用setsockopt。
SO_SNDTIMEO:限制send超时。

SO_RCVTIMEO:限制recv超时

对于connect的超时控制,还需要首先将socket转为非阻塞模型,处理完毕后(见下面二),再转换为阻塞socket,进行发送与接收的超时控制。

二、非阻塞socket
1、采用自定义计算时间的方案:

在while循环以前计算起始时间;在循环中,connect、send、recv每进行一次,计算经过了多长时间。最终,可以确定超时。

在实际中,非阻塞的socket采用自定义时间的方案时候,应该再while循环中,除了有需要的传输函数(connect、send、recv),还要sleep一下。sleep时间长了,会导致接收不及时;sleep时间长了,会导致CPU资源浪费!所以,应该变被动轮询为主动通知,这就要用select模型!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值