从QsslServer::sslErrors调用QDialog::exec可以吗?

问题描述 投票:0回答:1

我正在开发一个使用 SSL 套接字进行通信的应用程序,当不受信任的客户端连接到服务器时,它会发出 sslError 现在我应该使用 QDialog::exec 询问用户决定(我不能去对于异步操作,因为我需要处理 sslError 内的错误,无论是忽略SslError还是中止连接取决于用户的决定)。另外,当我在 QDialog 窗口打开时打开另一个窗口时,客户端断开连接(客户端套接字似乎被删除)然后 QDialog exec 返回,当我访问套接字时,它会抛出内存访问冲突错误。

Qt 文档QDialog::exec

注意:避免使用该功能;相反,使用 open()。与 exec() 不同,open() 是异步的,并且不会旋转额外的事件循环。这可以防止发生一系列危险的错误(例如,在通过 exec() 打开对话框时删除对话框的父级)。使用 open() 时,您可以连接到 QDialog 的 finish() 信号,以便在对话框关闭时收到通知。

遇到这种情况我该怎么办?

我有一个替代的身份验证过程,如果存在任何sslHandshakeErrors,则从连接开始,允许连接继续,然后如果用户按“确定”,我将异步显示对话框,我发送一个名为 authOk 的数据包并继续阅读,否则我发送一个名为 authFailed 的数据包并断开客户端连接。但在这个过程中,似乎没有使用标准的SSL连接握手。

有更好的解决方案吗,谢谢:)

c++ qt authentication ssl network-programming
1个回答
0
投票

您正在处理这样一种情况:您需要在 Qt 应用程序的握手过程中处理 SSL 错误,并与用户交互以根据这些错误做出决策。在这种情况下使用 QDialog::exec() 是有问题的,因为它会阻塞事件循环,并且您希望避免阻塞事件循环以防止出现您所描述的问题。

我的建议是为身份验证对话框使用单独的线程。

© www.soinside.com 2019 - 2024. All rights reserved.