diff options
author | Sebastien Braun | 2010-07-15 01:12:17 +0200 |
---|---|---|
committer | Sebastien Braun | 2010-07-15 01:12:17 +0200 |
commit | 94b88e75b9ebeaf9abb2adef130fdf971884e7b4 (patch) | |
tree | cc0bb545880b0d159267290d7aa5c63693905dcb /src/net/mcast/McastSender.cpp | |
parent | Change to shorter NAK intervals for performance. (diff) | |
download | pvs-94b88e75b9ebeaf9abb2adef130fdf971884e7b4.tar.gz pvs-94b88e75b9ebeaf9abb2adef130fdf971884e7b4.tar.xz pvs-94b88e75b9ebeaf9abb2adef130fdf971884e7b4.zip |
* Upgrade OpenPGM to current trunk
* Implement wait-for-shutdown for McastPGMSocket
* Work around bug in UDP encapsulation
Diffstat (limited to 'src/net/mcast/McastSender.cpp')
-rw-r--r-- | src/net/mcast/McastSender.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/net/mcast/McastSender.cpp b/src/net/mcast/McastSender.cpp index 24a629c..f49c0df 100644 --- a/src/net/mcast/McastSender.cpp +++ b/src/net/mcast/McastSender.cpp @@ -61,36 +61,44 @@ void McastSender::readyToSend() strm << qChecksum(fpdu.constData(), fpdu.size()); _socket->sendPacket(fpdu); - // _socket->finish(); + connect(_socket, SIGNAL(connectionFinished()), this, SLOT(socketFinished())); + _socket->shutdown(); _finished = true; - emit finished(); - return; + _iodev->close(); } + else + { + QByteArray barr(DEFAULT_MULTICAST_APDU, '\0'); + qint64 len_read; + len_read = _iodev->read(barr.data(), barr.capacity()); + barr.resize((int)len_read); - QByteArray barr(DEFAULT_MULTICAST_APDU, '\0'); - qint64 len_read; - len_read = _iodev->read(barr.data(), barr.capacity()); - barr.resize((int)len_read); - - _hash.addData(barr); + _hash.addData(barr); - QByteArray pdu; - QDataStream strm(&pdu, QIODevice::WriteOnly); - strm.setByteOrder(QDataStream::BigEndian); + QByteArray pdu; + QDataStream strm(&pdu, QIODevice::WriteOnly); + strm.setByteOrder(QDataStream::BigEndian); - strm << (quint64)MCASTFT_MAGIC << _curoffs; - strm << barr; - quint16 checksum = qChecksum(pdu.constData(), pdu.size()); - strm << checksum; + strm << (quint64)MCASTFT_MAGIC << _curoffs; + strm << barr; + quint16 checksum = qChecksum(pdu.constData(), pdu.size()); + strm << checksum; - _curoffs += len_read; + _curoffs += len_read; - _socket->sendPacket(pdu); + _socket->sendPacket(pdu); + } } void McastSender::close() { _socket->finish(); } + +void McastSender::socketFinished() +{ + delete _socket; + emit finished(); +} |