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