我正在使用 go-back-n 窗口设置基本的 UDP 套接字文件传输服务器/客户端设置,不幸的是,由于分配限制,我一直使用 Winsock 进行设置。
通常,为了管理未完成数据包的超时,我只会使用 signal() 但不确定这如何/是否真的在 Windows 上有效,以及这是否真的是最好的解决方案。是否有一些最好的方法来处理这些类型的套接字超时?还是我最好只使用 select() 管理超时?
如果你的应用程序有一个“main()”函数,那么使用 select() 来管理超时是最方便的,因为它的优点是它只使用套接字 api 调用,所以代码应该在任何支持 bsd 样式套接字 api 的平台上工作并且不需要 Windows 消息循环。
如果你正在编写一个窗口 GUI 风格的应用程序——通常带有一个WinMain()
入口点和一个消息循环,那么WSAAsyncSelect
套接字句柄上的 () 将获得发布到 HWND 的读(和写)就绪通知消息——SetTimer
同样发布定期WM_TIMER
通知,并且GetTickCount
可以用于检测哪个套接字空闲时间过长。