gpt4 book ai didi

c++ - Qt: 为什么断网后 `QAbstractSocket::error(QAbstractSocket::SocketError)`信号没有产生?

转载 作者:行者123 更新时间:2023-11-30 05:11:57 25 4
gpt4 key购买 nike

我正在尝试在已连接的 SSL 套接字断开互联网连接时获得信号。这是我派生 QSslSocket 的方式:

struct CloudSSL::Socket : public QSslSocket
{
Q_OBJECT public:

void ConnectSlots ()
{
connect(this, SIGNAL(readyRead()), this, SLOT(ReceiveData()));
connect(this, SIGNAL(disconnected()), this, SLOT(Disconnected()));
// *** None of the above or below is invoking when internet disconnects ***
connect(this, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(Error(QAbstractSocket::SocketError)));
}

virtual ~Socket ()
{
QObject::disconnect();
QSslSocket::abort();
}

public slots:
void ReceiveData ()
{
LOG("Socket received data...");
}

void Disconnected ()
{
LOG("Socket got disconnected...");
}

void Error (QAbstractSocket::SocketError error)
{
LOG("Socket error ", error);
}
}

这是它的初始化方式:

m_pSSLSocket = new Socket;
m_pSSLSocket->setProtocol(QSsl::TlsV1_2);
m_pSSLSocket->setLocalCertificateChain(QSslCertificate::fromPath(":/Certificate.pem", QSsl::Pem));
m_pSSLSocket->setPrivateKey(QSslKey(privateKeyFile.readAll(), QSsl::Rsa));
m_pSSLSocket->setSocketOption(QAbstractSocket::LowDelayOption, true); // <---
m_pSSLSocket->setSocketOption(QAbstractSocket::KeepAliveOption, true); // <---
m_pSSLSocket->connectToHostEncrypted(SAARATHY_URL, SAARATHY_PORT);
m_pSSLSocket->ignoreSslErrors();

总体上一切正常。但是,如果我在我的 Ubuntu PC 中禁用 wifi,那么我不会像预期的那样从 QAbstractSocket::SocketError 收到任何网络错误。 :

QAbstractSocket::NetworkError -- 7 -- An error occurred with the network (e.g., the network cable was accidentally plugged out).

在此 Qn 之前引用了以下帖子:

问题:Qt独有的断网接收信号的方式是什么?

最佳答案

除非您使用的协议(protocol)具有某种保持事件状态,否则如果您不发送任何内容,则不会发送任何内容,也不会尝试进行错误检查。

如果您想查看连接是否有问题,您实际上必须发送一些东西。如果电缆被拔掉或您与远程主机之间存在任何其他问题,那么(在适当的超时和重试后)您将收到错误消息。

要查看远程主机是否以一种很好的方式关闭了连接,您必须尝试读取一些内容,在这种情况下,接收调用将返回它已读取零字节。

关于c++ - Qt: 为什么断网后 `QAbstractSocket::error(QAbstractSocket::SocketError)`信号没有产生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803126/

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