回答
选择功能可与超时使用。虽然select最常用于非阻塞套接字,但我还没有阅读阻止传递阻塞套接字来选择的任何内容。如果select函数超时,那么您的行为等同于接受超时。
从MSDN
“的参数readfds标识是为了便于阅读待检查的套接字。如果套接字当前处于监听状态时,其将被标记为可读如果传入的连接请求已被接收使得接受保证无阻塞来完成。对于其他的套接字,即排队的数据可读性装置是可用的,用于读取以使得到的recv呼叫,的WSARecv,WSARecvFrom,或recvfrom的被保证不被阻塞“。
这应该给你你期望的行为。
否,选择不改变套接字的行为或接受功能,它仍然是相同的 - 接受还是块没有任何超时,我检查过了。 – Alecs 2012-03-13 12:43:32
关键是你不应该先打电话给接受,你打电话选择第一个填充readfds与你的听筒,当选择返回,如果你的套接字被标记为可读,然后调用接受,它会成功。如果没有传入的连接请求,则选择将超时。 – Jay 2012-03-13 12:46:28
哦,是的,这是我想要的,谢谢!但是[这里](http://tangentsoft.net/wskfaq/articles/io-strategies.html)据说应该避免调用select,你能评论一下吗? – Alecs 2012-03-13 13:39:17
这是相当容易安排另一个线程关闭监听套接字AFER超时。创建一个自动重置事件,并在accept()返回时发出信号。用WaitForSingleObject()在具有超时间隔的循环中编写一个等待事件的函数。如果WFSO返回非WAIT_OBJECT_0的任何内容,请关闭监听套接字并退出。在进入accept()循环之前,创建一个线程来调用该函数。
另一种可能性是使用的AcceptEx(),并与作为重叠结构的hEvent传递事件的WFSO()超时等待。如果超时激活,请使用CancelIo()从网络IO系统中删除排队的acceptEx()完成。
- 1. Winsock C++连接超时
- 2. 如何设置winsock接受函数超时?
- 3. 奇怪的连接超时使用winsock
- 4. Winsock接受函数的错误
- 5. Winsock监听和接受函数(C++)
- 6. Winsock - 为什么ZNC(和IRC保镖)不接受我的winsock连接?
- 7. Winsock中的connect()函数中的超时
- 8. WINSOCK - 在不存在的IP上设置连接尝试超时?
- 9. Winsock接受事件有时会停止信号(WSAEventSelect)
- 10. 如何在接受与Winsock控件的连接时响应特定客户端
- 11. LuaSocket服务器:接受()超时(TCP)
- 12. Netty - 服务器接受超时
- 13. 超时/ CMD文件接受用户输入超时
- 14. TCP Winsock:接受多个连接/客户端
- 15. Winsock - 停止接受新的连接,但保持与现有连接的通信
- 16. Winsock,只接受来自特定IP地址的请求
- 17. 受控超链接hijaxing
- 18. Android - InetAddress的最大超时时间为可接受()
- 19. Winsock连接测试
- 20. Winsock接收数据
- 21. SMTP ASP.NET Winsock连接
- 22. 如何检测的WinSock TCP超时与BindIoCompletionCallback
- 23. EWS自动发现不可接受的超时
- 24. IMessenger.Send缺少超载接受令牌
- 25. 呼叫服务器套接字接受方法的问题与无限超时
- 26. winsock连接持续多久?
- 27. MinGW链接器错误:winsock
- 28. Winsock - 与连接问题
- 29. 连接超时
- 30. 连接超时
可能的重复http://stackoverflow.com/questions/4181784/how-to-set-socket-timeout-in-c-when-making-multiple-connections – 2012-03-13 11:49:45
@Adriano不,这个问题是关于客户端,* accept *只在服务器端使用。他们不是在谈论*接受*功能。 – Alecs 2012-03-13 11:52:39
不能在Windows,你必须自己管理超时(不知何故,线程轮询?) – 2012-03-13 12:03:32