summaryrefslogtreecommitdiffstats
path: root/src/net/mcast/McastSender.cpp
diff options
context:
space:
mode:
authorSebastien Braun2010-07-15 01:12:17 +0200
committerSebastien Braun2010-07-15 01:12:17 +0200
commit94b88e75b9ebeaf9abb2adef130fdf971884e7b4 (patch)
treecc0bb545880b0d159267290d7aa5c63693905dcb /src/net/mcast/McastSender.cpp
parentChange to shorter NAK intervals for performance. (diff)
downloadpvs-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.cpp44
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();
+}