summaryrefslogtreecommitdiffstats
path: root/src/net/mcast/McastSender.cpp
diff options
context:
space:
mode:
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();
+}