我在生产服务器上的情况很奇怪。
我们有使用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);
这在过去4年中一直很好,但是在Windows 2012 R2更新之后,服务器突然挂起closesocket(session->listen_socket);
我还尝试过将LINGER选项设置为0超时来进行假性关闭的解决方案,但这没有帮助。
所有想法如何解决此问题或进行任何其他诊断?
答案 0 :(得分:6)
此问题是由Microsoft KB4338815 修补程序引起的,该补丁导致closesockett®永远挂在Intel Xeon处理器上,FileZilla伙计也在此线程中发布了此问题。 https://forum.filezilla-project.org/viewtopic.php?t=49308