我可以找到大量关于启动 IOCP 服务器的文章,但没有一篇是关于正确关闭它的 =/
完成后关闭服务器的正确方法是什么?更具体地说,我已经使用 PostQueuedCompletionStatus() 告诉工作线程退出,但我是否还需要取消所有挂起的 IO,并在退出前关闭所有套接字?
我在 MSDN 上找到了 CancelSynchronousIo(),似乎我可以让每个工作线程在收到退出完成通知时调用此函数...这是正确的方法吗?
感谢您对此的任何帮助。
最佳答案
如果您遍历所有打开的连接并关闭所有套接字,那么所有挂起的 I/O 将自行完成并且服务器将关闭。您可以通过延迟关闭来关闭以允许完成任何挂起的写入数据,或者您可以关闭套接字上的延迟并导致丢弃挂起的写入数据并使用 RST 重置连接而不是干净地关闭。
我有一些 IOCP 服务器示例 here ,您可能已经看过,但它展示了如何实现干净关机。
关于c++ - 如何正确关闭 IOCP 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663755/