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