查看select()函数,它似乎用于检查多个事件源。
我有一个套接字绑定到我服务器上的一个端口。
基本上想要在500ms后超时recvfrom()功能。
select()是执行此操作的最佳/唯一方式还是过度杀戮?
谢谢!
答案 0 :(得分:1)
select是在套接字文件描述符上设置超时的最佳方法。它实际上是正常的调用,它会让你的程序在数据可用或超时发生之前进入休眠状态,这意味着你的程序不会锁定系统。
答案 1 :(得分:1)
如果在阻塞模式下使用套接字,那么使用select()
等待数据到达,然后调用recvfrom()
是一种(并且更常见)方法,但另一种方法是使用{ {1}}设置套接字的setsockopt()
选项,该选项设置阻塞读取操作的超时(有关阻止发送操作,请参阅SO_RCVTIMEO
)。然后,您可以致电SO_SENDTIMEO
并让它在内部超时。
如果您在非阻止模式下使用套接字,则可以使用recvfrom()
或FD_READ
接收异步WSAASyncSelect()
通知。无需等待超时。
如果您在重叠模式下使用套接字,则可以使用WSAASyncEvent()
或WSARecvFrom()
从WSAGetOverlappedResult()
接收异步读取通知。无需等待超时。