src/network/socket/qsocks5socketengine.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/src/network/socket/qsocks5socketengine.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/network/socket/qsocks5socketengine.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -1235,6 +1235,9 @@
         if (!readNotificationPending)
             connectData->readBuffer.clear();
         emitReadNotification();
+        data->controlSocket->close();
+        // cause a disconnect in the outer socket
+        emitWriteNotification();
     } else if (socks5State == Uninitialized
                || socks5State == AuthenticationMethodsSent
                || socks5State == Authenticating
@@ -1245,6 +1248,7 @@
     } else {
         q_func()->setError(data->controlSocket->error(), data->controlSocket->errorString());
         emitReadNotification();
+        emitWriteNotification();
     }
 }
 
@@ -1623,6 +1627,16 @@
 }
 #endif // QT_NO_UDPSOCKET
 
+qint64 QSocks5SocketEngine::bytesToWrite() const
+{
+    Q_D(const QSocks5SocketEngine);
+    if (d->data && d->data->controlSocket) {
+        return d->data->controlSocket->bytesToWrite();
+    } else {
+        return 0;
+    }
+}
+
 int QSocks5SocketEngine::option(SocketOption option) const
 {
     Q_D(const QSocks5SocketEngine);