From ff2aeb5dad907f833b4311243213e5ee9fe12dfc Mon Sep 17 00:00:00 2001 From: Shane Synan Date: Tue, 7 Jun 2016 05:43:38 -0400 Subject: [PATCH] Don't log socket error when disconnecting Add flag _disconnectExpected, set to true in disconnectFromIrc() in order to ignore RemoteHostClosed socket errors. It's not really an error when it's expected behavior, no? --- src/core/corenetwork.cpp | 10 +++++++++- src/core/corenetwork.h | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 93d5b6a4..a928d5b3 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -39,6 +39,7 @@ CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) _userInputHandler(new CoreUserInputHandler(this)), _autoReconnectCount(0), _quitRequested(false), + _disconnectExpected(false), _previousConnectionAttemptFailed(false), _lastUsedServerIndex(0), @@ -225,6 +226,8 @@ void CoreNetwork::connectToIrc(bool reconnecting) void CoreNetwork::disconnectFromIrc(bool requested, const QString &reason, bool withReconnect, bool forceImmediate) { + // Disconnecting from the network, should expect a socket close or error + _disconnectExpected = true; _quitRequested = requested; // see socketDisconnected(); if (!withReconnect) { _autoReconnectTimer.stop(); @@ -455,8 +458,10 @@ void CoreNetwork::socketHasData() void CoreNetwork::socketError(QAbstractSocket::SocketError error) { - if (_quitRequested && error == QAbstractSocket::RemoteHostClosedError) + // Ignore socket closed errors if expected + if (_disconnectExpected && error == QAbstractSocket::RemoteHostClosedError) { return; + } _previousConnectionAttemptFailed = true; qWarning() << qPrintable(tr("Could not connect to %1 (%2)").arg(networkName(), socket.errorString())); @@ -547,6 +552,8 @@ void CoreNetwork::socketDisconnected() setConnected(false); emit disconnected(networkId()); emit socketDisconnected(identityPtr(), localAddress(), localPort(), peerAddress(), peerPort()); + // Reset disconnect expectations + _disconnectExpected = false; if (_quitRequested) { _quitRequested = false; setConnectionState(Network::Disconnected); @@ -591,6 +598,7 @@ void CoreNetwork::networkInitialized() { setConnectionState(Network::Initialized); setConnected(true); + _disconnectExpected = false; _quitRequested = false; if (useAutoReconnect()) { diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index d596c538..f121986a 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -372,6 +372,10 @@ private: bool _quitRequested; QString _quitReason; + bool _disconnectExpected; /// If true, connection is quitting, expect a socket close + // This avoids logging a spurious RemoteHostClosedError whenever disconnect is called without + // specifying a permanent (saved to core session) disconnect. + bool _previousConnectionAttemptFailed; int _lastUsedServerIndex; -- 2.20.1