Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ closesocket()执行时间长_C++_Windows_Multithreading_Network Programming - Fatal编程技术网

C++ closesocket()执行时间长

C++ closesocket()执行时间长,c++,windows,multithreading,network-programming,C++,Windows,Multithreading,Network Programming,我创建一个用于测试的应用程序;我使用Platinum库来实现UPnP协议,我遇到了一个问题:关闭窗口后进程并没有完成,而忽略了我使用任务管理器杀死它的尝试。我可以在接下来的1-10分钟内查看我的应用程序的重影 调试后,我可以说网络代码中的问题-白金代码创建了4个线程,用于在网络接口上接收UDP数据包。当我销毁所有库对象并且它们在所有其他线程之后关闭时,该线程不会关闭。NPT_BsdSocketFd的析构函数中存在问题-当它调用closesocket()时,将不会从此函数返回执行:( 每根线都有自

我创建一个用于测试的应用程序;我使用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下启动它时,它在我的电脑上完成了,没有任何问题。它看起来像是驱动程序中的问题。或者防病毒软件出现问题……;)