summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qsctpsocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/socket/qsctpsocket.cpp')
-rw-r--r--src/network/socket/qsctpsocket.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/network/socket/qsctpsocket.cpp b/src/network/socket/qsctpsocket.cpp
index 9ab241f9ab..f65ffa765d 100644
--- a/src/network/socket/qsctpsocket.cpp
+++ b/src/network/socket/qsctpsocket.cpp
@@ -162,8 +162,12 @@ bool QSctpSocketPrivate::canReadNotification()
do {
// Determine the size of the pending datagram.
qint64 bytesToRead = socketEngine->bytesAvailable();
- if (bytesToRead == 0)
+ if (bytesToRead == 0) {
+ // As a corner case, if we can't determine the size of the pending datagram,
+ // try to read 4K of data from the socket. Subsequent ::recvmsg call either
+ // fails or returns the actual length of the datagram.
bytesToRead = 4096;
+ }
Q_ASSERT((datagramSize + int(bytesToRead)) < MaxByteArraySize);
incomingDatagram.resize(datagramSize + int(bytesToRead));
@@ -479,7 +483,7 @@ QNetworkDatagram QSctpSocket::readDatagram()
}
if (d->currentReadChannel >= d->readHeaders.size()
- || (d->readHeaders[d->currentReadChannel].size() == 0)) {
+ || d->readHeaders[d->currentReadChannel].size() == 0) {
Q_ASSERT(d->buffer.isEmpty());
return QNetworkDatagram();
}