diff options
Diffstat (limited to 'src/network/socket/qudpsocket.cpp')
-rw-r--r-- | src/network/socket/qudpsocket.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 87686f94e1..f4e7d20b03 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -333,7 +333,7 @@ qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddre if (state() == UnconnectedState) bind(); - qint64 sent = d->socketEngine->writeDatagram(data, size, address, port); + qint64 sent = d->socketEngine->writeDatagram(data, size, QIpPacketHeader(address, port)); d->cachedSocketDescriptor = d->socketEngine->socketDescriptor(); if (sent >= 0) { @@ -379,7 +379,20 @@ qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *addres qDebug("QUdpSocket::readDatagram(%p, %llu, %p, %p)", data, maxSize, address, port); #endif QT_CHECK_BOUND("QUdpSocket::readDatagram()", -1); - qint64 readBytes = d->socketEngine->readDatagram(data, maxSize, address, port); + + qint64 readBytes; + if (address || port) { + QIpPacketHeader header; + readBytes = d->socketEngine->readDatagram(data, maxSize, &header, + QAbstractSocketEngine::WantDatagramSender); + if (address) + *address = header.senderAddress; + if (port) + *port = header.senderPort; + } else { + readBytes = d->socketEngine->readDatagram(data, maxSize); + } + d_func()->socketEngine->setReadNotificationEnabled(true); if (readBytes < 0) { d->socketError = d->socketEngine->error(); |