すでに接続されているSSLソケットのためにインターネットが切断されているときに信号を取得しようとしています。ここで私はQSslSocket
を得ている方法は次のとおりです。ここでQt:インターネットが接続されていないときにQAbstractSocket :: error(QAbstractSocket :: SocketError)シグナルが生成されないのはなぜですか?
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で無線LANを無効にした場合QAbstractSocket::SocketError
から予想されるように、その後、私は、任意のネットワーク・エラーを得ることはありません:
QAbstractSocket::NetworkError
- 7 - エラーがネットワーク (例えば、ネットワークで発生しましたケーブルが誤って差し込まれた)。このQnの前
呼ば次の記事:
質問:インターネットが切断されたときに、信号を受信するQtの排他的な方法は何ですか?
** Q1 **:以前の実装(Qtに移植する前)は、[この回答](https://stackoverflow.com/a/10447560/514235)で説明されている手法を使用して実装されました。それは完全にうまくいきました。インターネット切断時に通知するタイムアウトオプションを設定できました。そのような組み込み機能はQt内にありますか? ** Q2 **:(title Qn)Qtページで説明されているように 'error(...)'がそれ自体で 'QAbstractSocket :: NetworkError'で通知されないのはなぜですか? – iammilind