C++ closesocket()执行时间长
我创建一个用于测试的应用程序;我使用Platinum库来实现UPnP协议,我遇到了一个问题:关闭窗口后进程并没有完成,而忽略了我使用任务管理器杀死它的尝试。我可以在接下来的1-10分钟内查看我的应用程序的重影 调试后,我可以说网络代码中的问题-白金代码创建了4个线程,用于在网络接口上接收UDP数据包。当我销毁所有库对象并且它们在所有其他线程之后关闭时,该线程不会关闭。NPT_BsdSocketFd的析构函数中存在问题-当它调用closesocket()时,将不会从此函数返回执行:( 每根线都有自己的插座来接收C++ closesocket()执行时间长,c++,windows,multithreading,network-programming,C++,Windows,Multithreading,Network Programming,我创建一个用于测试的应用程序;我使用Platinum库来实现UPnP协议,我遇到了一个问题:关闭窗口后进程并没有完成,而忽略了我使用任务管理器杀死它的尝试。我可以在接下来的1-10分钟内查看我的应用程序的重影 调试后,我可以说网络代码中的问题-白金代码创建了4个线程,用于在网络接口上接收UDP数据包。当我销毁所有库对象并且它们在所有其他线程之后关闭时,该线程不会关闭。NPT_BsdSocketFd的析构函数中存在问题-当它调用closesocket()时,将不会从此函数返回执行:( 每根线都有自
~NPT_BsdSocketFd() {
if (m_Cancellable) {
if (!NPT_BSD_SOCKET_IS_INVALID(m_CancelFds[0])) closesocket(m_CancelFds[0]);
if (!NPT_BSD_SOCKET_IS_INVALID(m_CancelFds[1])) closesocket(m_CancelFds[1]);
}
closesocket(m_SocketFd); //problem here...
}
有人知道为什么closesocket()吗执行如此长的时间?有没有可能这是一个输出套接字,而您刚刚通过它发送了一些大量数据,而另一端尚未接收/确认?我还不能保证,但我认为这是可能的。但这是UDP套接字,不需要另一端的确认。啊,所以使用UDP,它仍然可以直到用户空间中的所有数据都被刷新到内核中,但一旦完成,就应该可以关闭套接字。然而,这是导致关闭时间如此长的唯一合理原因(当然,内核和驱动程序实现中的错误除外)经过测试,我可以说这个错误只存在于我的电脑上,在windows下。在我们实验室的所有其他电脑上,程序工作正常。而且,当我在linux下启动它时,它在我的电脑上完成了,没有任何问题。它看起来像是驱动程序中的问题。或者防病毒软件出现问题……;)