96bool QUdpSocketPrivate::doEnsureInitialized(
const QHostAddress &bindAddress, quint16 bindPort,
174bool QUdpSocket::joinMulticastGroup(
const QHostAddress &groupAddress,
175 const QNetworkInterface &iface)
179 return d->socketEngine->joinMulticastGroup(groupAddress, iface);
214bool QUdpSocket::leaveMulticastGroup(
const QHostAddress &groupAddress,
215 const QNetworkInterface &iface)
218 return d_func()->socketEngine->leaveMulticastGroup(groupAddress, iface);
307qint64 QUdpSocket::writeDatagram(
const char *data, qint64 size,
const QHostAddress &address,
311#if defined QUDPSOCKET_DEBUG
312 qDebug(
"QUdpSocket::writeDatagram(%p, %llu, \"%s\", %i)", data, size,
313 address.toString().toLatin1().constData(), port);
315 if (!d->doEnsureInitialized(QHostAddress::Any, 0, address))
317 if (state() == UnconnectedState)
320 qint64 sent = d->socketEngine->writeDatagram(data, size, QIpPacketHeader(address, port));
321 d->cachedSocketDescriptor = d->socketEngine->socketDescriptor();
324 emit bytesWritten(sent);
328 d->setErrorAndEmit(QAbstractSocket::TemporaryError,
329 tr(
"Unable to send a datagram"));
332 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());
372qint64 QUdpSocket::writeDatagram(
const QNetworkDatagram &datagram)
375#if defined QUDPSOCKET_DEBUG
376 qDebug(
"QUdpSocket::writeDatagram(%p, %i, \"%s\", %i)",
377 datagram.d->data.constData(),
378 datagram.d->data.size(),
379 datagram.destinationAddress().toString().toLatin1().constData(),
380 datagram.destinationPort());
382 if (!d->doEnsureInitialized(QHostAddress::Any, 0, datagram.destinationAddress()))
384 if (state() == UnconnectedState)
387 qint64 sent = d->socketEngine->writeDatagram(datagram.d->data.constData(),
388 datagram.d->data.size(),
390 d->cachedSocketDescriptor = d->socketEngine->socketDescriptor();
393 emit bytesWritten(sent);
395 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());
417QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize)
421#if defined QUDPSOCKET_DEBUG
422 qDebug(
"QUdpSocket::receiveDatagram(%lld)", maxSize);
424 QT_CHECK_BOUND(
"QUdpSocket::receiveDatagram()", QNetworkDatagram());
427 maxSize = d->socketEngine->pendingDatagramSize();
429 return QNetworkDatagram();
431 QNetworkDatagram result(QByteArray(maxSize, Qt::Uninitialized));
432 qint64 readBytes = d->socketEngine->readDatagram(result.d->data.data(), maxSize, &result.d->header,
433 QAbstractSocketEngine::WantAll);
434 d->hasPendingData =
false;
435 d->hasPendingDatagram =
false;
436 d->socketEngine->setReadNotificationEnabled(
true);
438 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());
442 result.d->data.truncate(readBytes);
461qint64 QUdpSocket::readDatagram(
char *data, qint64 maxSize, QHostAddress *address,
466#if defined QUDPSOCKET_DEBUG
467 qDebug(
"QUdpSocket::readDatagram(%p, %llu, %p, %p)", data, maxSize, address, port);
472 if (address || port) {
473 QIpPacketHeader header;
474 readBytes = d->socketEngine->readDatagram(data, maxSize, &header,
475 QAbstractSocketEngine::WantDatagramSender);
477 *address = header.senderAddress;
479 *port = header.senderPort;
481 readBytes = d->socketEngine->readDatagram(data, maxSize);
484 d->hasPendingData =
false;
485 d->hasPendingDatagram =
false;
486 d->socketEngine->setReadNotificationEnabled(
true);
488 if (readBytes == -2) {
490 d->setErrorAndEmit(QAbstractSocket::TemporaryError,
491 tr(
"No datagram available for reading"));
494 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());