我在生产服务器上的情况很奇怪。

我们有使用C++编写的网络应用程序,该应用程序通过使用IOCP编写的TCP满足用户请求。

两天前,我们对Windows 2012 R2进行了更新(它安装了最新的安全更新。以前的更新是6个月前)。在更新之后,当尝试停止服务时,我们在日志中看到服务器挂起以关闭监听套接字

closesocket(session->listen_socket);

接下来是停止网络系统的模式:
  • PostQueuedCompletionStatus(m_completion_port, 0, NULL, NULL); x
    工作线程数
  • 等待所有工作线程完成其工作
  • CloseHandle(m_completion_port);
  • closesocket(session->accept_socket);closesocket(session->listen_socket);

  • 在过去的四年中,这一直很好,但是在Windows 2012 R2更新后,服务器突然卡在了电话上closesocket(session->listen_socket);
    我也尝试过将LINGER选项设置为0超时以进行无效关闭的解决方案,但这没有帮助。

    所有想法如何解决此问题或进行任何其他诊断?

    最佳答案

    该问题是由Microsoft KB4338815 的补丁程序引起的,该补丁程序导致closesockett®永远卡在Intel Xeon处理器上,FileZilla伙计也在此线程中发布了此问题。
    https://forum.filezilla-project.org/viewtopic.php?t=49308

    08-26 18:00