设置接收超时的两种方法:select与setsockopt的问题

在udp编程中,我要调用recvfrom接收数据。我尝试使用了两种设置接收超时的办法:
1)使用select函数;2)使用setsockopt函数。
服务器和客户端的流程是这样的:客户端向服务器发送数据,并使用recvfrom等待数据(分别使用两种方法设置超时);服务器收到数据后,sleep一段时间,向客户端回复数据。
问题在这儿:使用select函数时,两端的超时能对得上,也就是说,如果客户端设3s超时,服务器sleep 3s以下,则客户端可以收到服务器的数据,服务器sleep 3s以上就不行了。但使用setsockopt函数时,如果客户端设置3s超时,服务器sleep 3.5s以下,客户端都能收到服务器的数据,客户端不应该已经超时了吗?我想问这多出来的0.5s该怎么解释?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问