gpt4 book ai didi

c++ - 使用连接的套接字终止 QWebSocketServer

转载 作者:行者123 更新时间:2023-11-28 01:19:25 26 4
gpt4 key购买 nike

我调试用 C++/Qt 5.12.1 编写的控制台多线程应用程序。它在 Linux Mint 18.3 x64 上运行。

这个应用程序有 SIGINT 处理程序、QWebSocketServerQWebSocket 表。它使用 close() QWebSocketServer 并为 QWebSocket 中的项目调用 abort()/deleteLater() 处理终止的表。

如果 websocket 客户端连接到此控制台应用程序,则由于某些正在运行的线程(我想它是内部 QWebSocket 线程)而终止失败。如果没有连接,则终止成功。

如何解决?以便应用程序正常退出。

最佳答案

为了优雅地退出套接字服务器,我们可以尝试:

最重要的部分是让主线程事件循环运行并等待QWebSocketServer::closed()。以便插槽调用 QCoreApplication::quit() .

这甚至可以通过:

connect(webSocketServer, &QWebSocketServer::closed,
QCoreApplication::instance(), &QCoreApplication::quit);

如果我们不需要更详细的 react 。

首先连接该信号后,继续 pauseAccepting() 以防止更多连接。调用 QWebSocketServer::close

如果上面的已经足够,则可能不需要下面的。您需要先尝试上面的,只有当仍然有问题时才处理现有的和挂起的连接。根据我的经验,行为因平台而异,并且在服务器环境中有一些独特的 websocket 实现(这可能只是适合您的 Qt)。

只要我们有一些包含 QWebSocket 实例的数组,我们就可以尝试对所有实例调用 QWebSocket::abort() 以立即释放。这一步好像是题主描述的。

尝试使用 QWebSocketServer::nextPendingConnection() 迭代挂起 连接并为他们调用 abort()。如果同样有效,请调用 deleteLater

关于c++ - 使用连接的套接字终止 QWebSocketServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com