recv()windows socket占用无限时间 – 如何超时?
发布时间:2020-12-14 02:53:37 所属栏目:Windows 来源:网络整理
导读:我使用文件描述符来查找可读的套接字并继续阅读.由于某些原因,线路上没有数据的套接字继续读取并且永不返回.有没有办法可以在超时后退出接收? 我正在使用winsock库.. 解决方法 http://tangentsoft.net/wskfaq/newbie.html#timeout 2.15 – 如何更改Winsock
我使用文件描述符来查找可读的套接字并继续阅读.由于某些原因,线路上没有数据的套接字继续读取并且永不返回.有没有办法可以在超时后退出接收?
我正在使用winsock库.. 解决方法
http://tangentsoft.net/wskfaq/newbie.html#timeout
2.15 – 如何更改Winsock函数的超时? 一些阻塞的Winsock函数(例如connect())嵌入了一个超时.这背后的理论是只有堆栈具有设置适当超时所需的所有信息.然而,有些人发现堆栈使用的价值对于他们的应用来说太长了;它可以是一分钟或更长. 您可以使用SO_SNDTIMEO和SO_RCVTIMEO setsockopt()选项调整send()和recv()超时. . 对于其他Winsock函数,最好的解决方案是避免完全阻塞套接字.所有非阻塞套接字方法都提供了构建自定义超时的方法: Non-blocking sockets with select() – The fifth parameter to the select() function is a timeout value. Asynchronous sockets – Use the Windows API SetTimer(). Event objects – WSAWaitForMultipleEvents() has a timeout parameter. Waitable Timers – Call CreateWaitableTimers() to make a waitable timer,which you can then pass to a function like WSAEventSelect() along with your sockets: if none of the sockets is signalled before the timer goes off,the blocking function will return anyway. 请注意,使用异步和非阻塞套接字,您可以完全避免处理超时.即使Winsock忙,你的程序也会继续工作.因此,您可以让用户取消花费太长时间的操作,或者只是让Winsock的自然超时到期而不是在代码中接管此功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 如何在Windows上的Firefox中停止Flash内容闪耀jQ
- Windows服务器管理器停留在’显示将在服务器库存
- Windows 7中的Javacv UnsatisfiedLinkError
- xaml – 如何在PivotItem中获取全宽
- Windows Server 2016-清理残留域控信息
- Windows Server 2016-启用默认Windows搜索服务
- Window 系统 Excel 同时打开两个Excel 文件
- windows-phone-7.1 – 将照片保存到课堂
- windows-server-2003 – 可以使Robocopy跳过打开
- windows-10-universal – WPF XAML在UWP边缘问题
热点阅读