网络socket是整个传输层的基础,几乎所有的应用层协议都要经过该层来传输。下面以基于TCP的客户端在阻塞与非阻塞两个模式下的超时判断。
一、阻塞socket
采用setsockopt。
SO_SNDTIMEO:限制send超时。
SO_RCVTIMEO:限制recv超时
对于connect的超时控制,还需要首先将socket转为非阻塞模型,处理完毕后(见下面二),再转换为阻塞socket,进行发送与接收的超时控制。
二、非阻塞socket1、采用自定义计算时间的方案:
在while循环以前计算起始时间;在循环中,connect、send、recv每进行一次,计算经过了多长时间。最终,可以确定超时。
在实际中,非阻塞的socket采用自定义时间的方案时候,应该再while循环中,除了有需要的传输函数(connect、send、recv),还要sleep一下。sleep时间长了,会导致接收不及时;sleep时间长了,会导致CPU资源浪费!所以,应该变被动轮询为主动通知,这就要用select模型!