diff options
Diffstat (limited to 'src/network/socket/qsctpsocket.cpp')
-rw-r--r-- | src/network/socket/qsctpsocket.cpp | 8 |
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(); } |