c++ - 如何正确关闭 IOCP 服务器?

标签 c++ winsock iocp

我可以找到大量关于启动 IOCP 服务器的文章,但没有一篇是关于正确关闭它的 =/

完成后关闭服务器的正确方法是什么?更具体地说,我已经使用 PostQueuedCompletionStatus() 告诉工作线程退出,但我是否还需要取消所有挂起的 IO,并在退出前关闭所有套接字?

我在 MSDN 上找到了 CancelSynchronousIo(),似乎我可以让每个工作线程在收到退出完成通知时调用此函数...这是正确的方法吗?

感谢您对此的任何帮助。

最佳答案

如果您遍历所有打开的连接并关闭所有套接字,那么所有挂起的 I/O 将自行完成并且服务器将关闭。您可以通过延迟关闭来关闭以允许完成任何挂起的写入数据,或者您可以关闭套接字上的延迟并导致丢弃挂起的写入数据并使用 RST 重置连接而不是干净地关闭。

我有一些 IOCP 服务器示例 here ,您可能已经看过,但它展示了如何实现干净关机。

关于c++ - 如何正确关闭 IOCP 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663755/

相关文章:

c++ - gethostbyname 函数中的 IP 地址顺序

windows - I/O 完成端口可以帮助数据库而不是文件写入吗?

c++ - IOCP C++ TCP 客户端

c++ - 使用 IOCP 检测子进程的退出/失败 - C++ - Windows

windows - 最小 Winsock2 应用程序的性能调试网络吞吐量

c++ - 是否可以通过 systemtap 探测器停止进程以便附加 gdb?

c++ - 为什么C/C++中没有||=运算符?

c++ - 在非常量函数中使用 const_iterator

c - IOCP:没有字节复制的通知

c++ - 从 C++ 中的函数动态分配和修改内存