bool ServerPool::listen(QList<QHostAddress> addrs, quint16 port, bool requireall) { m_port = port; QList<QHostAddress>::const_iterator it; for (it = addrs.begin(); it != addrs.end(); ++it) { PrivTcpServer *server = new PrivTcpServer(this); server->setProxy(m_proxy); server->setMaxPendingConnections(m_maxPendingConn); connect(server, SIGNAL(newConnection(int)), this, SLOT(newTcpConnection(int))); if (server->listen(*it, m_port)) { LOG(VB_GENERAL, LOG_INFO, QString("Listening on TCP %1:%2") .arg(PRETTYIP(it)).arg(port)); m_tcpServers.append(server); if (m_port == 0) m_port = server->serverPort(); } else if (requireall) { LOG(VB_GENERAL, LOG_ERR, QString("Failed listening on TCP %1:%2") .arg(PRETTYIP(it)).arg(port)); close(); server->disconnect(); server->deleteLater(); return false; } else { LOG(VB_GENERAL, LOG_WARNING, QString("Failed listening on TCP %1:%2") .arg(PRETTYIP(it)).arg(port)); server->disconnect(); server->deleteLater(); } } if (m_tcpServers.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) { 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; }
bool ServerPool::listen(QList<QHostAddress> addrs, quint16 port, bool requireall, PoolServerType servertype) { m_port = port; QList<QHostAddress>::const_iterator it; for (it = addrs.begin(); it != addrs.end(); ++it) { PrivTcpServer *server = new PrivTcpServer(this, servertype); #if (QT_VERSION >= 0x050000) connect(server, &PrivTcpServer::newConnection, this, &ServerPool::newTcpConnection); #else connect(server, SIGNAL(newConnection(qt_socket_fd_t)), this, SLOT(newTcpConnection(qt_socket_fd_t))); #endif server->setProxy(m_proxy); server->setMaxPendingConnections(m_maxPendingConn); if (server->listen(*it, m_port)) { LOG(VB_GENERAL, LOG_INFO, QString("Listening on TCP %1:%2") .arg(PRETTYIP(it)).arg(port)); if (servertype == kTCPServer) m_tcpServers.append(server); else if (m_port == 0) m_port = server->serverPort(); } else { LOG(VB_GENERAL, LOG_ERR, QString("Failed listening on TCP %1:%2 - Error %3: %4") .arg(PRETTYIP(it)) .arg(port) .arg(server->serverError()) .arg(server->errorString())); server->disconnect(); server->deleteLater(); if (server->serverError() == QAbstractSocket::HostNotFoundError) { LOG(VB_GENERAL, LOG_ERR, QString("Address %1 no longer exists - ignoring") .arg(PRETTYIP(it))); continue; } if (requireall) { close(); return false; } } } if (m_tcpServers.size() == 0) return false; m_listening = true; return true; }