J'essaie d'obtenir un signal lorsque Internet est déconnecté pour une socket SSL déjà connectée. Voici la façon dont je l'ai dérivé QSslSocket
:Qt: Pourquoi le signal `QAbstractSocket :: error (QAbstractSocket :: SocketError)` n'est-il pas généré lorsque l'Internet est déconnecté?
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);
}
}
Voici comment il est initialisé:
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();
Les choses fonctionnent bien en général. Cependant, si je désactive le wifi dans mon Ubuntu PC, alors je ne reçois pas d'erreur de réseau comme prévu du QAbstractSocket::SocketError
:
QAbstractSocket::NetworkError
- 7 - Une erreur est survenue avec le réseau (par exemple, le réseau le câble a été accidentellement bouché).
messages visés suivants avant cette Qn:
Question: Quelle est la façon exclusive Qt de recevoir un signal lorsque l'Internet est déconnecté?
** Q1 **: Ma mise en œuvre antérieure (avant le portage à Qt) a été implémentée en utilisant la technique décrite dans [cette réponse] (https://stackoverflow.com/a/10447560/514235). Cela a fonctionné parfaitement bien, où je pourrais définir une option de délai d'attente pour le moment de notifier sur la déconnexion Internet. Y a-t-il une telle installation intégrée dans Qt? ** Q2 **: (titre Qn) Pourquoi l'erreur '(...)' n'est pas signalée avec 'QAbstractSocket :: NetworkError' telle qu'elle est décrite dans la page Qt? – iammilind