首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当套接字设置为处理超时时,select()会发生什么情况

当套接字设置为处理超时时,select()会发生什么情况
EN

Stack Overflow用户
提问于 2019-04-12 02:24:36
回答 1查看 338关注 0票数 1

根据recv()的手册页,如果已为使用setsockopt(SO_RCVTIMEO)的接收设置了超时,则errno将设置为EAGAINEWOULDBLOCK

我的问题是,如果多个这样的套接字与select()一起使用,会发生什么情况。如果其中一个套接字由于不活动而超时,将选择返回。select()将返回的内容。

我正在尝试实现一个具有检测超时功能的tftp服务器。一种方法是对select()使用超时,但然后我必须为每个套接字使用不同的超时值,并不断将计时器更新为最小值,然后进行一些更多的变戏法...等等。等等。感觉好像有很多不必要的工作。

PS: tftp服务器是一个并发服务器,它使用I/O多路复用处理多个客户端。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-12 03:53:44

select()的timeout参数确定select()调用本身在调用返回之前等待某些事情发生的最长时间,而不是单个套接字在返回超时错误之前等待多长时间。

听起来,如果您在一段时间内没有收到客户的消息,您可能想要声明某种错误条件。使用UDP,您必须自己跟踪它。对于每个客户,记录下你最后一次收到它的消息。将select()放入一个超时时间大约为1秒的循环中,然后每次它返回时,检查当前时间与上次收到每个客户端消息的时间之间的差异。当差值超过你想要的任何阈值时,你就有了你的错误条件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55638970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档