diff options
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(); +} |