173bool QUdpSocket::joinMulticastGroup(
const QHostAddress &groupAddress,
174 const QNetworkInterface &iface)
178 return d->socketEngine->joinMulticastGroup(groupAddress, iface);
213bool QUdpSocket::leaveMulticastGroup(
const QHostAddress &groupAddress,
214 const QNetworkInterface &iface)
217 return d_func()->socketEngine->leaveMulticastGroup(groupAddress, iface);
306qint64 QUdpSocket::writeDatagram(
const char *data, qint64 size,
const QHostAddress &address,
310#if defined QUDPSOCKET_DEBUG
311 qDebug(
"QUdpSocket::writeDatagram(%p, %llu, \"%s\", %i)", data, size,
312 address.toString().toLatin1().constData(), port);
314 if (!d->doEnsureInitialized(QHostAddress::Any, 0, address))
316 if (state() == UnconnectedState)
319 qint64 sent = d->socketEngine->writeDatagram(data, size, QIpPacketHeader(address, port));
320 d->cachedSocketDescriptor = d->socketEngine->socketDescriptor();
323 emit bytesWritten(sent);
327 d->setErrorAndEmit(QAbstractSocket::TemporaryError,
328 tr(
"Unable to send a datagram"));
331 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());
371qint64 QUdpSocket::writeDatagram(
const QNetworkDatagram &datagram)
374#if defined QUDPSOCKET_DEBUG
375 qDebug(
"QUdpSocket::writeDatagram(%p, %i, \"%s\", %i)",
376 datagram.d->data.constData(),
377 datagram.d->data.size(),
378 datagram.destinationAddress().toString().toLatin1().constData(),
379 datagram.destinationPort());
381 if (!d->doEnsureInitialized(QHostAddress::Any, 0, datagram.destinationAddress()))
383 if (state() == UnconnectedState)
386 qint64 sent = d->socketEngine->writeDatagram(datagram.d->data.constData(),
387 datagram.d->data.size(),
389 d->cachedSocketDescriptor = d->socketEngine->socketDescriptor();
392 emit bytesWritten(sent);
394 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());
416QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize)
420#if defined QUDPSOCKET_DEBUG
421 qDebug(
"QUdpSocket::receiveDatagram(%lld)", maxSize);
423 QT_CHECK_BOUND(
"QUdpSocket::receiveDatagram()", QNetworkDatagram());
426 maxSize = d->socketEngine->pendingDatagramSize();
428 return QNetworkDatagram();
430 QNetworkDatagram result(QByteArray(maxSize, Qt::Uninitialized));
431 qint64 readBytes = d->socketEngine->readDatagram(result.d->data.data(), maxSize, &result.d->header,
432 QAbstractSocketEngine::WantAll);
433 d->hasPendingData =
false;
434 d->hasPendingDatagram =
false;
435 d->socketEngine->setReadNotificationEnabled(
true);
437 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());
441 result.d->data.truncate(readBytes);
460qint64 QUdpSocket::readDatagram(
char *data, qint64 maxSize, QHostAddress *address,
465#if defined QUDPSOCKET_DEBUG
466 qDebug(
"QUdpSocket::readDatagram(%p, %llu, %p, %p)", data, maxSize, address, port);
471 if (address || port) {
472 QIpPacketHeader header;
473 readBytes = d->socketEngine->readDatagram(data, maxSize, &header,
474 QAbstractSocketEngine::WantDatagramSender);
476 *address = header.senderAddress;
478 *port = header.senderPort;
480 readBytes = d->socketEngine->readDatagram(data, maxSize);
483 d->hasPendingData =
false;
484 d->hasPendingDatagram =
false;
485 d->socketEngine->setReadNotificationEnabled(
true);
487 if (readBytes == -2) {
489 d->setErrorAndEmit(QAbstractSocket::TemporaryError,
490 tr(
"No datagram available for reading"));
493 d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString());