void tst_QTcpServer::proxyFactory() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) return; QFETCH(QList<QNetworkProxy>, proxyList); QFETCH(QNetworkProxy, proxyUsed); QFETCH(bool, fails); MyProxyFactory *factory = new MyProxyFactory; factory->toReturn = proxyList; QNetworkProxyFactory::setApplicationProxyFactory(factory); QTcpServer server; bool listenResult = server.listen(); // Verify that the factory was called properly QCOMPARE(factory->callCount, 1); QCOMPARE(factory->lastQuery, QNetworkProxyQuery(0, QString(), QNetworkProxyQuery::TcpServer)); QCOMPARE(listenResult, !fails); QCOMPARE(server.errorString().isEmpty(), !fails); // note: the following test is not a hard failure. // Sometimes, error codes change for the better QTEST(int(server.serverError()), "expectedError"); }
//---------------------------------------------------------------------------------- void tst_QTcpServer::listenWhileListening() { QTcpServer server; QVERIFY(server.listen()); QTest::ignoreMessage(QtWarningMsg, "QTcpServer::listen() called when already listening"); QVERIFY(!server.listen()); }
void QListenerThread::HandleAcceptError( QAbstractSocket::SocketError socketError ) { QTcpServer* pServer =( QTcpServer* ) sender( ); Q_UNUSED( socketError ) QString strLog = pServer->errorString( ); SendLog( strLog, true ); }
static PyObject *meth_QTcpServer_listen(PyObject *sipSelf, PyObject *sipArgs, PyObject *sipKwds) { PyObject *sipParseErr = NULL; { const QHostAddress& a0def = QHostAddress::Any; const QHostAddress* a0 = &a0def; int a0State = 0; quint16 a1 = 0; QTcpServer *sipCpp; static const char *sipKwdList[] = { sipName_address, sipName_port, }; if (sipParseKwdArgs(&sipParseErr, sipArgs, sipKwds, sipKwdList, NULL, "B|J1t", &sipSelf, sipType_QTcpServer, &sipCpp, sipType_QHostAddress, &a0, &a0State, &a1)) { bool sipRes; Py_BEGIN_ALLOW_THREADS sipRes = sipCpp->listen(*a0,a1); Py_END_ALLOW_THREADS sipReleaseType(const_cast<QHostAddress *>(a0),sipType_QHostAddress,a0State); return PyBool_FromLong(sipRes); } } /* Raise an exception if the arguments couldn't be parsed. */ sipNoMethod(sipParseErr, sipName_QTcpServer, sipName_listen, doc_QTcpServer_listen); return NULL; }
//---------------------------------------------------------------------------------- void tst_QTcpServer::setSocketDescriptor() { QTcpServer server; QVERIFY(!server.setSocketDescriptor(42)); QCOMPARE(server.serverError(), QAbstractSocket::UnsupportedSocketOperationError); #ifdef Q_OS_WIN // ensure winsock is started WSADATA wsaData; QVERIFY(WSAStartup(MAKEWORD(2,0), &wsaData) == NO_ERROR); #endif SOCKET sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); QVERIFY(sock != INVALID_SOCKET); sockaddr_in sin; memset(&sin, 0, sizeof(sockaddr_in)); sin.sin_family = AF_INET; sin.sin_port = 0; sin.sin_addr.s_addr = 0x00000000; QVERIFY(::bind(sock, (sockaddr*)&sin, sizeof(sockaddr_in)) == 0); QVERIFY(::listen(sock, 10) == 0); QVERIFY(server.setSocketDescriptor(sock)); #ifdef Q_OS_WIN WSACleanup(); #endif }
void tst_QSocketNotifier::mixingWithTimers() { QTimer timer; timer.setInterval(0); timer.start(); QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost, 0)); MixingWithTimersHelper helper(&timer, &server); QCoreApplication::processEvents(); QCOMPARE(helper.timerActivated, true); QCOMPARE(helper.socketActivated, false); helper.timerActivated = false; helper.socketActivated = false; QTcpSocket socket; socket.connectToHost(server.serverAddress(), server.serverPort()); QCoreApplication::processEvents(); QCOMPARE(helper.timerActivated, true); QTRY_COMPARE(helper.socketActivated, true); }
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QTcpServer server; if (!server.listen(QHostAddress::LocalHost, 49199)) { qDebug("Failed to listen: %s", server.errorString().toLatin1().constData()); return 1; } #if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) QFile file(QLatin1String("/test_signal.txt")); file.open(QIODevice::WriteOnly); file.write("Listening\n"); file.flush(); file.close(); #else printf("Listening\n"); fflush(stdout); #endif server.waitForNewConnection(5000); qFatal("Crash"); return 0; }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // get ipv4 address list QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses(); for(int i = 0; i < ipAddressesList.size(); ++i) { QTcpServer testServer; if( ipAddressesList[i].toIPv4Address() && testServer.listen(ipAddressesList[i], 9876) ) { testServer.close(); ui->comboBox->addItem(ipAddressesList[i].toString()); } } ui->lineEditHostname->setText(QHostInfo::localHostName()); IPv4 = ui->comboBox->currentText(); serverPort = ui->spinBoxPort->value(); serverState = ServerStop; runningDay = runningSec = runningMin = runningHour = 0; timer = new QTimer(this); timer->start(1000); // msec db = NULL; server = NULL; connect(timer, SIGNAL(timeout()), this, SLOT(runningTimeChange())); }
void ServerSktTcp::newConnection() { QTcpServer* server = qobject_cast<QTcpServer*>(sender()); if (!server) return; QTcpSocket* client = server->nextPendingConnection(); while (client) { Conn* conn = new Conn; if (!conn) { client->deleteLater(); } else { client->setProperty(PROP_CONN, qVariantFromValue((void*)conn)); conn->client = client; conn->key = TK::ipstr(client->peerAddress(),client->peerPort(), true); connect(client, SIGNAL(readyRead()), this, SLOT(newData())); connect(client, SIGNAL(destroyed(QObject*)), this, SLOT(close(QObject*))); connect(client, SIGNAL(disconnected()), client, SLOT(deleteLater())); connect(client, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error())); setCookie(conn->key, conn); } client = server->nextPendingConnection(); } }
/*------------------------------------------------------------------------------* *------------------------------------------------------------------------------*/ WebProxy::WebProxy() { QTcpServer *proxyServer = new QTcpServer(this); proxyServer->listen(QHostAddress::Any, 8080); connect(proxyServer, SIGNAL(newConnection()), this, SLOT(manageQuery())); qDebug( ) << __FILE__ << __FUNCTION__ << "Proxy server running at port" << proxyServer->serverPort(); } //WebProxy::WebProxy
void LocalQmlProfilerRunnerTest::testFindFreePort() { QUrl serverUrl = Utils::urlFromLocalHostAndFreePort(); QVERIFY(serverUrl.port() != -1); QVERIFY(!serverUrl.host().isEmpty()); QTcpServer server; QVERIFY(server.listen(QHostAddress(serverUrl.host()), serverUrl.port())); }
void LocalQmlProfilerRunnerTest::testFindFreePort() { QString host; Utils::Port port = LocalQmlProfilerRunner::findFreePort(host); QVERIFY(port.isValid()); QVERIFY(!host.isEmpty()); QTcpServer server; QVERIFY(server.listen(QHostAddress(host), port.number())); }
// test only for posix void tst_QSocketNotifier::posixSockets() { QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost, 0)); int posixSocket = qt_safe_socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr; addr.sin_addr.s_addr = htonl(0x7f000001); addr.sin_family = AF_INET; addr.sin_port = htons(server.serverPort()); qt_safe_connect(posixSocket, (const struct sockaddr*)&addr, sizeof(sockaddr_in)); QVERIFY(server.waitForNewConnection(5000)); QScopedPointer<QTcpSocket> passive(server.nextPendingConnection()); ::fcntl(posixSocket, F_SETFL, ::fcntl(posixSocket, F_GETFL) | O_NONBLOCK); { QSocketNotifier rn(posixSocket, QSocketNotifier::Read); connect(&rn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy readSpy(&rn, SIGNAL(activated(int))); QVERIFY(readSpy.isValid()); // No write notifier, some systems trigger write notification on socket creation, but not all QSocketNotifier en(posixSocket, QSocketNotifier::Exception); connect(&en, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy errorSpy(&en, SIGNAL(activated(int))); QVERIFY(errorSpy.isValid()); passive->write("hello",6); passive->waitForBytesWritten(5000); QTestEventLoop::instance().enterLoop(3); QCOMPARE(readSpy.count(), 1); QCOMPARE(errorSpy.count(), 0); char buffer[100]; int r = qt_safe_read(posixSocket, buffer, 100); QCOMPARE(r, 6); QCOMPARE(buffer, "hello"); QSocketNotifier wn(posixSocket, QSocketNotifier::Write); connect(&wn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy writeSpy(&wn, SIGNAL(activated(int))); QVERIFY(writeSpy.isValid()); qt_safe_write(posixSocket, "goodbye", 8); QTestEventLoop::instance().enterLoop(3); QCOMPARE(readSpy.count(), 1); QCOMPARE(writeSpy.count(), 1); QCOMPARE(errorSpy.count(), 0); // Write notifier may have fired before the read notifier inside // QTcpSocket, give QTcpSocket a chance to see the incoming data passive->waitForReadyRead(100); QCOMPARE(passive->readAll(), QByteArray("goodbye",8)); } qt_safe_close(posixSocket); }
QTcpServer *KSocketFactory::listen(const QString &protocol, const QHostAddress &address, quint16 port, QObject *parent) { QTcpServer *server = new QTcpServer(parent); #ifndef QT_NO_NETWORKPROXY server->setProxy(proxyForListening(protocol)); #endif server->listen(address, port); return server; }
bool WinRtDebugSupport::getFreePort(quint16 &qmlDebuggerPort, QString *errorMessage) { QTcpServer server; if (!server.listen(QHostAddress::LocalHost, qmlDebuggerPort)) { *errorMessage = tr("Not enough free ports for QML debugging."); return false; } qmlDebuggerPort = server.serverPort(); return true; }
void SessionServer::Private::onNewTcpConnection() { QTcpServer * server = dynamic_cast< QTcpServer * >( this->sender() ); assert( server || !"QTcpServer casting failed" ); while( server->hasPendingConnections() ) { QTcpSocket * socket = server->nextPendingConnection(); ServerSession * session = new ServerSession( socket, this ); this->pendingSessions.push( session ); } emit this->newConnection(); }
Utils::Port LocalQmlProfilerRunner::findFreePort(QString &host) { QTcpServer server; if (!server.listen(QHostAddress::LocalHost) && !server.listen(QHostAddress::LocalHostIPv6)) { qWarning() << "Cannot open port on host for QML profiling."; return Utils::Port(); } host = server.serverAddress().toString(); return Utils::Port(server.serverPort()); }
void tst_QSocketNotifier::posixSockets() { #ifndef Q_OS_UNIX QSKIP("test only for posix", SkipAll); #else QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost, 0)); int posixSocket = qt_safe_socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr; addr.sin_addr.s_addr = htonl(0x7f000001); addr.sin_family = AF_INET; addr.sin_port = htons(server.serverPort()); qt_safe_connect(posixSocket, (const struct sockaddr*)&addr, sizeof(sockaddr_in)); QVERIFY(server.waitForNewConnection(5000)); QScopedPointer<QTcpSocket> passive(server.nextPendingConnection()); ::fcntl(posixSocket, F_SETFL, ::fcntl(posixSocket, F_GETFL) | O_NONBLOCK); { QSocketNotifier rn(posixSocket, QSocketNotifier::Read); connect(&rn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy readSpy(&rn, SIGNAL(activated(int))); QSocketNotifier wn(posixSocket, QSocketNotifier::Write); connect(&wn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy writeSpy(&wn, SIGNAL(activated(int))); QSocketNotifier en(posixSocket, QSocketNotifier::Exception); connect(&en, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop())); QSignalSpy errorSpy(&en, SIGNAL(activated(int))); passive->write("hello",6); passive->waitForBytesWritten(5000); QTestEventLoop::instance().enterLoop(3); QCOMPARE(readSpy.count(), 1); writeSpy.clear(); //depending on OS, write notifier triggers on creation or not. QCOMPARE(errorSpy.count(), 0); char buffer[100]; qt_safe_read(posixSocket, buffer, 100); QCOMPARE(buffer, "hello"); qt_safe_write(posixSocket, "goodbye", 8); QTestEventLoop::instance().enterLoop(3); QCOMPARE(readSpy.count(), 1); QCOMPARE(writeSpy.count(), 1); QCOMPARE(errorSpy.count(), 0); QCOMPARE(passive->readAll(), QByteArray("goodbye",8)); } qt_safe_close(posixSocket); #endif }
void ClientHandler::handleNewConnection() { QTcpServer *server = qobject_cast<QTcpServer *>(sender()); if ( server ) { QTcpSocket *sock = server->nextPendingConnection(); QObject::connect(sock, SIGNAL(readyRead()), this, SLOT(handleReadyRead())); } }
//---------------------------------------------------------------------------------- void tst_QTcpServer::ipv6Server() { #if defined(Q_OS_SYMBIAN) QSKIP("Symbian: IPv6 is not yet supported", SkipAll); #endif //### need to enter the event loop for the server to get the connection ?? ( windows) QTcpServer server; if (!server.listen(QHostAddress::LocalHostIPv6, 8944)) { QVERIFY(server.serverError() == QAbstractSocket::UnsupportedSocketOperationError); return; } QVERIFY(server.serverPort() == 8944); QVERIFY(server.serverAddress() == QHostAddress::LocalHostIPv6); QTcpSocket client; client.connectToHost("::1", 8944); QVERIFY(client.waitForConnected(5000)); QVERIFY(server.waitForNewConnection()); QVERIFY(server.hasPendingConnections()); QTcpSocket *serverSocket = 0; QVERIFY((serverSocket = server.nextPendingConnection())); }
bool CHttpServer::Listen(int Port) { QTcpServer* pListener = new QTcpServer(this); pListener->listen(QHostAddress::Any, Port); if (!pListener->isListening()) { delete pListener; return false; } connect(pListener, SIGNAL(newConnection()), this, SLOT(OnConnection())); m_Listners.insert(Port, pListener); return true; }
//---------------------------------------------------------------------------------- void tst_QTcpServer::listenError() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QSKIP("With socks5 we can not make hard requirements on the address or port", SkipAll); } } QTcpServer server; QVERIFY(!server.listen(QHostAddress("1.2.3.4"), 0)); QCOMPARE(server.serverError(), QAbstractSocket::SocketAddressNotAvailableError); QCOMPARE(server.errorString().toLatin1().constData(), "The address is not available"); }
void QXmppSocksServer::slotNewConnection() { QTcpServer *server = qobject_cast<QTcpServer*>(sender()); if (!server) return; QTcpSocket *socket = server->nextPendingConnection(); if (!socket) return; // register socket m_states.insert(socket, ConnectState); connect(socket, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); }
void tst_QTcpServer::addressReusable() { #if defined(Q_OS_SYMBIAN) && defined(Q_CC_NOKIAX86) QSKIP("Symbian: Emulator does not support process launching", SkipAll ); #endif #if defined(QT_NO_PROCESS) QSKIP("Qt was compiled with QT_NO_PROCESS", SkipAll); #else QFETCH_GLOBAL(bool, setProxy); if (setProxy) { QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QSKIP("With socks5 this test does not make senans at the momment", SkipAll); } } #if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) QString signalName = QString::fromLatin1("/test_signal.txt"); QFile::remove(signalName); // The crashingServer process will crash once it gets a connection. QProcess process; process.start("crashingServer/crashingServer"); int waitCount = 5; while (waitCount-- && !QFile::exists(signalName)) QTest::qWait(1000); QVERIFY(QFile::exists(signalName)); QFile::remove(signalName); #else // The crashingServer process will crash once it gets a connection. QProcess process; process.start("crashingServer/crashingServer"); QVERIFY(process.waitForReadyRead(5000)); #endif QTcpSocket socket; socket.connectToHost(QHostAddress::LocalHost, 49199); QVERIFY(socket.waitForConnected(5000)); QVERIFY(process.waitForFinished(5000)); // Give the system some time. QTest::qSleep(10); QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost, 49199)); #endif }
int ServerManager::createListeningSocket(const QHostAddress &address, quint16 port) { int sd = 0; QTcpServer server; if (!server.listen(address, port)) { qCritical("listen failed"); return sd; } sd = ::fcntl(server.socketDescriptor(), F_DUPFD, 0); #if defined(FD_CLOEXEC) ::fcntl(sd, F_SETFD, 0); #endif server.close(); return sd; }
//---------------------------------------------------------------------------------- void tst_QTcpServer::waitForConnectionTest() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QSKIP("Localhost servers don't work well with SOCKS5", SkipAll); } } QTcpSocket findLocalIpSocket; findLocalIpSocket.connectToHost(QtNetworkSettings::serverName(), 143); QVERIFY(findLocalIpSocket.waitForConnected(5000)); QTcpServer server; bool timeout = false; QVERIFY(server.listen(findLocalIpSocket.localAddress())); QVERIFY(!server.waitForNewConnection(1000, &timeout)); QCOMPARE(server.serverError(), QAbstractSocket::SocketTimeoutError); QVERIFY(timeout); ThreadConnector connector(findLocalIpSocket.localAddress(), server.serverPort()); connector.start(); #if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) QVERIFY(server.waitForNewConnection(9000, &timeout)); #else QVERIFY(server.waitForNewConnection(3000, &timeout)); #endif QVERIFY(!timeout); }
void ServerPool::close(void) { QTcpServer *server; while (!m_tcpServers.isEmpty()) { server = m_tcpServers.takeLast(); server->disconnect(); server->close(); delete server; } QUdpSocket *socket; while (!m_udpSockets.isEmpty()) { socket = m_udpSockets.takeLast(); socket->disconnect(); socket->close(); delete socket; } }
void NetworkDialog::serverOK() { QTcpServer* server = qobject_cast<QTcpServer*>(sender()); Q_ASSERT(server); m_socket = server->nextPendingConnection(); Q_ASSERT(m_socket); // refuse all other connections while (server->hasPendingConnections()) { delete server->nextPendingConnection(); } // reparent socket, so that we can safely destroy the server m_socket->setParent(this); delete server; // we're done accept(); }
AndroidRunnerWorkerBase::AndroidRunnerWorkerBase(RunControl *runControl, const AndroidRunnable &runnable) : m_androidRunnable(runnable) , m_adbLogcatProcess(nullptr, deleter) , m_psIsAlive(nullptr, deleter) , m_logCatRegExp(regExpLogcat) , m_gdbServerProcess(nullptr, deleter) , m_jdbProcess(nullptr, deleter) { auto runConfig = runControl->runConfiguration(); auto aspect = runConfig->extraAspect<Debugger::DebuggerRunConfigurationAspect>(); Core::Id runMode = runControl->runMode(); const bool debuggingMode = runMode == ProjectExplorer::Constants::DEBUG_RUN_MODE; m_useCppDebugger = debuggingMode && aspect->useCppDebugger(); if (debuggingMode && aspect->useQmlDebugger()) m_qmlDebugServices = QmlDebug::QmlDebuggerServices; else if (runMode == ProjectExplorer::Constants::QML_PROFILER_RUN_MODE) m_qmlDebugServices = QmlDebug::QmlProfilerServices; else if (runMode == ProjectExplorer::Constants::QML_PREVIEW_RUN_MODE) m_qmlDebugServices = QmlDebug::QmlPreviewServices; else m_qmlDebugServices = QmlDebug::NoQmlDebugServices; m_localGdbServerPort = Utils::Port(5039); QTC_CHECK(m_localGdbServerPort.isValid()); if (m_qmlDebugServices != QmlDebug::NoQmlDebugServices) { QTcpServer server; QTC_ASSERT(server.listen(QHostAddress::LocalHost) || server.listen(QHostAddress::LocalHostIPv6), qDebug() << tr("No free ports available on host for QML debugging.")); m_qmlServer.setScheme(Utils::urlTcpScheme()); m_qmlServer.setHost(server.serverAddress().toString()); m_qmlServer.setPort(server.serverPort()); } m_adb = AndroidConfigurations::currentConfig().adbToolPath().toString(); m_localJdbServerPort = Utils::Port(5038); QTC_CHECK(m_localJdbServerPort.isValid()); auto target = runConfig->target(); m_deviceSerialNumber = AndroidManager::deviceSerialNumber(target); m_apiLevel = AndroidManager::deviceApiLevel(target); }
//---------------------------------------------------------------------------------- void tst_QTcpServer::ipv6LoopbackPerformanceTest() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) return; QTcpServer server; if (!server.listen(QHostAddress::LocalHostIPv6, 0)) { QVERIFY(server.serverError() == QAbstractSocket::UnsupportedSocketOperationError); } else { QTcpSocket clientA; clientA.connectToHost(server.serverAddress(), server.serverPort()); QVERIFY(clientA.waitForConnected(5000)); QVERIFY(server.waitForNewConnection(5000)); QTcpSocket *clientB = server.nextPendingConnection(); QVERIFY(clientB); QByteArray buffer(16384, '@'); QTime stopWatch; stopWatch.start(); qlonglong totalWritten = 0; while (stopWatch.elapsed() < 5000) { clientA.write(buffer.data(), buffer.size()); clientA.flush(); totalWritten += buffer.size(); while (clientB->waitForReadyRead(100)) { if (clientB->bytesAvailable() == 16384) break; } clientB->read(buffer.data(), buffer.size()); clientB->write(buffer.data(), buffer.size()); clientB->flush(); totalWritten += buffer.size(); while (clientA.waitForReadyRead(100)) { if (clientA.bytesAvailable() == 16384) break; } clientA.read(buffer.data(), buffer.size()); } qDebug("\t\t%s: %.1fMB/%.1fs: %.1fMB/s", server.serverAddress().toString().toLatin1().constData(), totalWritten / (1024.0 * 1024.0), stopWatch.elapsed() / 1000.0, (totalWritten / (stopWatch.elapsed() / 1000.0)) / (1024 * 1024)); delete clientB; } }