在使用阻塞winsockets时,是否可以将超时设置为接受函数?就像我们可以通过setsockopt来恢复和发送功能一样?
似乎不可能,但我想确保。
发布于 2012-03-13 11:54:06
选择函数可以与超时一起使用。尽管select是最常用的非阻塞套接字,但我没有读到任何阻止传递阻塞套接字来选择的内容。如果select函数超时,则行为等效于接受超时。
来自MSDN
“参数readfds标识要检查可读性的套接字。如果套接字当前处于侦听状态,则如果接收到传入连接请求,保证在不阻塞__的情况下完成连接请求,则该套接字将被标记为可读。对于其他套接字,可读性意味着队列数据可用于读取,从而保证不阻塞对recv、WSARecv、WSARecvFrom或recvfrom的调用。”
这应该会给你你期待的行为。
发布于 2012-03-13 12:31:34
很容易安排另一个线程在超时后关闭侦听套接字。创建一个自动重置事件,并在accept()返回时发出信号。在带超时间隔的循环中使用WaitForSingleObject()编写一个等待事件的函数。如果WFSO返回任何不是WAIT_OBJECT_0的内容,请关闭侦听套接字并退出。在输入accept()循环之前,创建一个线程来调用函数。
另一种可能是使用acceptEx()并在作为重叠结构的hEvent传递的事件上等待WFSO()超时。如果超时触发,请使用CancelIo()从网络IO系统中删除排队的acceptEx()完成。
https://stackoverflow.com/questions/9683358
复制相似问题