bool ServerPool::bind(QList<QHostAddress> addrs, quint16 port, bool requireall) { m_port = port; QList<QHostAddress>::const_iterator it; for (it = addrs.begin(); it != addrs.end(); ++it) { QUdpSocket *socket = new QUdpSocket(this); connect(socket, SIGNAL(readyRead()), this, SLOT(newUdpDatagram())); if (socket->bind(*it, port)) { LOG(VB_GENERAL, LOG_INFO, QString("Binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); m_udpSockets.append(socket); } else if (requireall) { LOG(VB_GENERAL, LOG_ERR, QString("Failed binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); close(); socket->disconnect(); socket->deleteLater(); return false; } else { LOG(VB_GENERAL, LOG_WARNING, QString("Failed binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); socket->disconnect(); socket->deleteLater(); } } if (m_udpSockets.size() == 0) return false; m_listening = true; return true; }
bool ServerPool::bind(QList<QHostAddress> addrs, quint16 port, bool requireall) { m_port = port; QList<QHostAddress>::const_iterator it; for (it = addrs.begin(); it != addrs.end(); ++it) { QNetworkAddressEntry host; #if !defined(QT_NO_IPV6) if (it->protocol() == QAbstractSocket::IPv6Protocol) { QList<QNetworkAddressEntry>::iterator iae; for (iae = naList_6.begin(); iae != naList_6.end(); ++iae) { if (PrivUdpSocket::contains(*iae, *it)) { host = *iae; break; } } } else #endif { QList<QNetworkAddressEntry>::iterator iae; for (iae = naList_4.begin(); iae != naList_4.end(); ++iae) { if (PrivUdpSocket::contains(*iae, *it)) { host = *iae; break; } } } PrivUdpSocket *socket = new PrivUdpSocket(this, host); if (socket->bind(*it, port)) { LOG(VB_GENERAL, LOG_INFO, QString("Binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); m_udpSockets.append(socket); connect(socket, SIGNAL(readyRead()), this, SLOT(newUdpDatagram())); } else { LOG(VB_GENERAL, LOG_ERR, QString("Failed binding to UDP %1:%2 - Error %3: %4") .arg(PRETTYIP(it)) .arg(port) .arg(socket->error()) .arg(socket->errorString())); socket->disconnect(); socket->deleteLater(); if (socket->error() == QAbstractSocket::SocketAddressNotAvailableError) { LOG(VB_GENERAL, LOG_ERR, QString("Address %1 no longer exists - ignoring") .arg(PRETTYIP(it))); continue; } if (requireall) { close(); return false; } } } if (m_udpSockets.size() == 0) return false; m_listening = true; return true; }