Unsolved QUdpSocket Rebroadcaster
-
I'm developing a simple tray application which acts as a UDP socket re-broadcaster.
One thing I have realised is that as I'm listening for UDP broadcasts, any re-broadcast sent out from my application is automatically picked up again and then re-broadcasted again and again and again.
The setup code I have is as follows is:
// Create a QUdpSocket to listen for Oculus status messages m_listener = new QUdpSocket(this); connect(m_listener, SIGNAL(readyRead()), this, SLOT(readDatagrams())); m_listener->bind(52102, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
The code to read and re-broadcast is as follows:
// Read through any available datagrams while (m_listener->hasPendingDatagrams()) { // Read the datagram out of the socket buffer QByteArray rx; rx.resize(m_listener->pendingDatagramSize()); m_listener->readDatagram(rx.data(), rx.size()); // Validate and modify the UDP packet... m_listener->writeDatagram(rx, QHostAddress::Broadcast, 52102); }
One possible solution could be to disconnect the
readyRead
signal during thewriteDatagram
phase so that it is not re-received by my application but this seems a little numb. Another possible solution would be to check the "source IP" address during thereadyRead
slot.Are there any better solutions?
-
instead of using
m_listener->readDatagram
you could usem_listener->receiveDatagram
that contains the sender address. then just compare the sender address with yours and if they are the same ignore it