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?
(cherry picked from commit
ff2aeb5dad907f833b4311243213e5ee9fe12dfc)
_userInputHandler(new CoreUserInputHandler(this)),
_autoReconnectCount(0),
_quitRequested(false),
_userInputHandler(new CoreUserInputHandler(this)),
_autoReconnectCount(0),
_quitRequested(false),
+ _disconnectExpected(false),
_previousConnectionAttemptFailed(false),
_lastUsedServerIndex(0),
_previousConnectionAttemptFailed(false),
_lastUsedServerIndex(0),
void CoreNetwork::disconnectFromIrc(bool requested, const QString &reason, bool withReconnect,
bool forceImmediate)
{
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();
_quitRequested = requested; // see socketDisconnected();
if (!withReconnect) {
_autoReconnectTimer.stop();
void CoreNetwork::socketError(QAbstractSocket::SocketError error)
{
void CoreNetwork::socketError(QAbstractSocket::SocketError error)
{
- if (_quitRequested && error == QAbstractSocket::RemoteHostClosedError)
+ // Ignore socket closed errors if expected
+ if (_disconnectExpected && error == QAbstractSocket::RemoteHostClosedError) {
_previousConnectionAttemptFailed = true;
qWarning() << qPrintable(tr("Could not connect to %1 (%2)").arg(networkName(), socket.errorString()));
_previousConnectionAttemptFailed = true;
qWarning() << qPrintable(tr("Could not connect to %1 (%2)").arg(networkName(), socket.errorString()));
setConnected(false);
emit disconnected(networkId());
emit socketDisconnected(identityPtr(), localAddress(), localPort(), peerAddress(), peerPort());
setConnected(false);
emit disconnected(networkId());
emit socketDisconnected(identityPtr(), localAddress(), localPort(), peerAddress(), peerPort());
+ // Reset disconnect expectations
+ _disconnectExpected = false;
if (_quitRequested) {
_quitRequested = false;
setConnectionState(Network::Disconnected);
if (_quitRequested) {
_quitRequested = false;
setConnectionState(Network::Disconnected);
{
setConnectionState(Network::Initialized);
setConnected(true);
{
setConnectionState(Network::Initialized);
setConnected(true);
+ _disconnectExpected = false;
_quitRequested = false;
if (useAutoReconnect()) {
_quitRequested = false;
if (useAutoReconnect()) {
bool _quitRequested;
QString _quitReason;
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;
bool _previousConnectionAttemptFailed;
int _lastUsedServerIndex;