@mrdebug said in QUdpSocket and broadcast receiver:
for (int count= 0; count< QNetworkInterface::allAddresses().count(); count++) {
if (QNetworkInterface::allAddresses().at(count).protocol()== QAbstractSocket::IPv4Protocol && QNetworkInterface::allAddresses().at(count)!= QHostAddress(QHostAddress::LocalHost)) {
QUdpSocket *pQUdpSocket= new QUdpSocket(this);
pQUdpSocket->bind(QNetworkInterface::allAddresses().at(count), 3702, QAbstractSocket::DontShareAddress | QAbstractSocket::ReuseAddressHint);
pQUdpSocket->joinMulticastGroup(QHostAddress("239.255.255.250"));
connect(pQUdpSocket, SIGNAL(readyRead()), this, SLOT(DiscoveringPendingDatagrams()));
QVQUdpSockets.append(pQUdpSocket);
}
}
This code don't looks very good to me :(
Please avoid multiple calling of QNetworkInterface::allAddresses(). This don't make sense, you always work with a new list instance!
I would prefer something like:
for(const auto & interface : QNetworkInterface::allAddresses())
{
if (interface.protocol() == QAbstractSocket::IPv4Protocol && interface != QHostAddress(QHostAddress::LocalHost)) {
auto pQUdpSocket = new QUdpSocket(this);
pQUdpSocket->bind(interface, 3702, QAbstractSocket::DontShareAddress | QAbstractSocket::ReuseAddressHint);
pQUdpSocket->joinMulticastGroup(QHostAddress("239.255.255.250"));
connect(pQUdpSocket, SIGNAL(readyRead()), this, SLOT(DiscoveringPendingDatagrams()));
QVQUdpSockets.append(pQUdpSocket);
}
}