X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fremotepeer.cpp;fp=src%2Fcommon%2Fremotepeer.cpp;h=f2439fc2548df1ea9c4452510969421919fa1133;hp=8ed3469ffd65f19c819707b04b6a06a3783a2442;hb=676141b18a54c4aa34d4831b9d054d8d63ba21b1;hpb=2f6d1f4ead3a11b1f9ca4676e659bd93042a67af diff --git a/src/common/remotepeer.cpp b/src/common/remotepeer.cpp index 8ed3469f..f2439fc2 100644 --- a/src/common/remotepeer.cpp +++ b/src/common/remotepeer.cpp @@ -40,8 +40,10 @@ RemotePeer::RemotePeer(::AuthHandler *authHandler, QTcpSocket *socket, QObject * _lag(0) { socket->setParent(this); - connect(socket, SIGNAL(disconnected()), SIGNAL(disconnected())); + connect(socket, SIGNAL(readyRead()), SLOT(onSocketDataAvailable())); + connect(socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), SLOT(onSocketStateChanged(QAbstractSocket::SocketState))); connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(onSocketError(QAbstractSocket::SocketError))); + connect(socket, SIGNAL(disconnected()), SIGNAL(disconnected())); #ifdef HAVE_SSL QSslSocket *sslSocket = qobject_cast(socket); @@ -50,6 +52,11 @@ RemotePeer::RemotePeer(::AuthHandler *authHandler, QTcpSocket *socket, QObject * #endif connect(_heartBeatTimer, SIGNAL(timeout()), SLOT(sendHeartBeat())); + + // It's possible that more data has already arrived during the handshake, so readyRead() wouldn't be triggered. + // However, we can't call a virtual function from the ctor, so let's do it asynchronously. + if (socket->bytesAvailable()) + QTimer::singleShot(0, this, SLOT(onSocketDataAvailable())); }