void tst_QTcpServer::constructing() { QTcpServer socket; // Check the initial state of the QTcpSocket. QCOMPARE(socket.isListening(), false); QCOMPARE((int)socket.serverPort(), 0); QCOMPARE(socket.serverAddress(), QHostAddress()); QCOMPARE(socket.maxPendingConnections(), 30); QCOMPARE(socket.hasPendingConnections(), false); QCOMPARE(socket.socketDescriptor(), -1); QCOMPARE(socket.serverError(), QAbstractSocket::UnknownSocketError); // Check the state of the socket layer? }
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; }
/*! Listen a port for connections on a socket. This function must be called in a tfmanager process. */ int TApplicationServerBase::nativeListen(const QHostAddress &address, quint16 port, OpenFlag flag) { int sd = 0; QTcpServer server; if (!server.listen(address, port)) { tSystemError("Listen failed port:%d", port); return sd; } sd = duplicateSocket(server.socketDescriptor()); // duplicate if (flag == CloseOnExec) { ::fcntl(sd, F_SETFD, ::fcntl(sd, F_GETFD) | FD_CLOEXEC); } else { ::fcntl(sd, F_SETFD, 0); // clear } ::fcntl(sd, F_SETFL, ::fcntl(sd, F_GETFL) | O_NONBLOCK); // non-block server.close(); return sd; }