summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qabstractsocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/socket/qabstractsocket.cpp')
-rw-r--r--src/network/socket/qabstractsocket.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index dd6d4fea90b..07712c423e0 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -432,6 +432,7 @@
#include "qabstractsocket.h"
#include "qabstractsocket_p.h"
+#include "qnetworkinterface.h"
#include "private/qhostinfo_p.h"
@@ -1175,12 +1176,11 @@ bool QAbstractSocketPrivate::readFromSocket()
// Read from the socket, store data in the read buffer.
char *ptr = buffer.reserve(bytesToRead);
qint64 readBytes = socketEngine->read(ptr, bytesToRead);
+ buffer.chop(bytesToRead - (readBytes < 0 ? qint64(0) : readBytes));
if (readBytes == -2) {
// No bytes currently available for reading.
- buffer.chop(bytesToRead);
return true;
}
- buffer.chop(bytesToRead - (readBytes < 0 ? qint64(0) : readBytes));
#if defined(QABSTRACTSOCKET_DEBUG)
qDebug("QAbstractSocketPrivate::readFromSocket() got %lld bytes, buffer size = %lld",
readBytes, buffer.size());
@@ -1500,7 +1500,8 @@ bool QAbstractSocket::bind(const QHostAddress &address, quint16 port, BindMode m
return d->bind(address, port, mode);
}
-bool QAbstractSocketPrivate::bind(const QHostAddress &address, quint16 port, QAbstractSocket::BindMode mode)
+bool QAbstractSocketPrivate::bind(const QHostAddress &address, quint16 port, QAbstractSocket::BindMode mode,
+ const QNetworkInterface *iface)
{
Q_Q(QAbstractSocket);
@@ -1535,6 +1536,10 @@ bool QAbstractSocketPrivate::bind(const QHostAddress &address, quint16 port, QAb
socketEngine->setOption(QAbstractSocketEngine::BindExclusively, 0);
#endif
}
+#if QT_CONFIG(networkinterface)
+ if (iface && iface->isValid())
+ socketEngine->setOption(QAbstractSocketEngine::BindInterfaceIndex, iface->index());
+#endif
bool result = socketEngine->bind(address, port);
cachedSocketDescriptor = socketEngine->socketDescriptor();