summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/socket/qabstractsocketengine_p.h2
-rw-r--r--src/network/socket/qhttpsocketengine.cpp3
-rw-r--r--src/network/socket/qhttpsocketengine_p.h2
-rw-r--r--src/network/socket/qnativesocketengine.cpp8
-rw-r--r--src/network/socket/qnativesocketengine_p.h2
-rw-r--r--src/network/socket/qsocks5socketengine.cpp3
-rw-r--r--src/network/socket/qsocks5socketengine_p.h2
-rw-r--r--src/network/socket/qtcpserver.cpp31
-rw-r--r--src/network/socket/qtcpserver.h3
-rw-r--r--src/network/socket/qtcpserver_p.h1
-rw-r--r--tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp6
-rw-r--r--tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp2
12 files changed, 48 insertions, 17 deletions
diff --git a/src/network/socket/qabstractsocketengine_p.h b/src/network/socket/qabstractsocketengine_p.h
index 3d9ce96cb3..2da29384a0 100644
--- a/src/network/socket/qabstractsocketengine_p.h
+++ b/src/network/socket/qabstractsocketengine_p.h
@@ -133,7 +133,7 @@ public:
virtual bool connectToHost(const QHostAddress &address, quint16 port) = 0;
virtual bool connectToHostByName(const QString &name, quint16 port) = 0;
virtual bool bind(const QHostAddress &address, quint16 port) = 0;
- virtual bool listen() = 0;
+ virtual bool listen(int backlog) = 0;
virtual int accept() = 0;
virtual void close() = 0;
diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp
index 6170f114f5..7ba3e17873 100644
--- a/src/network/socket/qhttpsocketengine.cpp
+++ b/src/network/socket/qhttpsocketengine.cpp
@@ -191,8 +191,9 @@ bool QHttpSocketEngine::bind(const QHostAddress &, quint16)
return false;
}
-bool QHttpSocketEngine::listen()
+bool QHttpSocketEngine::listen(int backlog)
{
+ Q_UNUSED(backlog);
qWarning("Operation is not supported");
setError(QAbstractSocket::UnsupportedSocketOperationError,
QLatin1String("Unsupported socket operation"));
diff --git a/src/network/socket/qhttpsocketengine_p.h b/src/network/socket/qhttpsocketengine_p.h
index 0c2c450c81..492e51fe7f 100644
--- a/src/network/socket/qhttpsocketengine_p.h
+++ b/src/network/socket/qhttpsocketengine_p.h
@@ -95,7 +95,7 @@ public:
bool connectToHost(const QHostAddress &address, quint16 port) override;
bool connectToHostByName(const QString &name, quint16 port) override;
bool bind(const QHostAddress &address, quint16 port) override;
- bool listen() override;
+ bool listen(int backlog) override;
int accept() override;
void close() override;
diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp
index 302b714cb4..d46c3640d2 100644
--- a/src/network/socket/qnativesocketengine.cpp
+++ b/src/network/socket/qnativesocketengine.cpp
@@ -689,7 +689,7 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port)
\sa bind(), accept()
*/
-bool QNativeSocketEngine::listen()
+bool QNativeSocketEngine::listen(int backlog)
{
Q_D(QNativeSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::listen(), false);
@@ -701,11 +701,7 @@ bool QNativeSocketEngine::listen()
Q_CHECK_TYPE(QNativeSocketEngine::listen(), QAbstractSocket::TcpSocket, false);
#endif
- // We're using a backlog of 50. Most modern kernels support TCP
- // syncookies by default, and if they do, the backlog is ignored.
- // When there is no support for TCP syncookies, this value is
- // fine.
- return d->nativeListen(50);
+ return d->nativeListen(backlog);
}
/*!
diff --git a/src/network/socket/qnativesocketengine_p.h b/src/network/socket/qnativesocketengine_p.h
index e5f0701d14..462a7d24d0 100644
--- a/src/network/socket/qnativesocketengine_p.h
+++ b/src/network/socket/qnativesocketengine_p.h
@@ -138,7 +138,7 @@ public:
bool connectToHost(const QHostAddress &address, quint16 port) override;
bool connectToHostByName(const QString &name, quint16 port) override;
bool bind(const QHostAddress &address, quint16 port) override;
- bool listen() override;
+ bool listen(int backlog) override;
int accept() override;
void close() override;
diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp
index 339116d402..747a99003f 100644
--- a/src/network/socket/qsocks5socketengine.cpp
+++ b/src/network/socket/qsocks5socketengine.cpp
@@ -1391,9 +1391,10 @@ bool QSocks5SocketEngine::bind(const QHostAddress &addr, quint16 port)
}
-bool QSocks5SocketEngine::listen()
+bool QSocks5SocketEngine::listen(int backlog)
{
Q_D(QSocks5SocketEngine);
+ Q_UNUSED(backlog);
QSOCKS5_Q_DEBUG << "listen()";
diff --git a/src/network/socket/qsocks5socketengine_p.h b/src/network/socket/qsocks5socketengine_p.h
index 77b461b944..fd063eb4fa 100644
--- a/src/network/socket/qsocks5socketengine_p.h
+++ b/src/network/socket/qsocks5socketengine_p.h
@@ -81,7 +81,7 @@ public:
bool connectToHost(const QHostAddress &address, quint16 port) override;
bool connectToHostByName(const QString &name, quint16 port) override;
bool bind(const QHostAddress &address, quint16 port) override;
- bool listen() override;
+ bool listen(int backlog) override;
int accept() override;
void close() override;
diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp
index a404350d98..1a3d122b7f 100644
--- a/src/network/socket/qtcpserver.cpp
+++ b/src/network/socket/qtcpserver.cpp
@@ -331,7 +331,7 @@ bool QTcpServer::listen(const QHostAddress &address, quint16 port)
return false;
}
- if (!d->socketEngine->listen()) {
+ if (!d->socketEngine->listen(d->listenBacklog)) {
d->serverSocketError = d->socketEngine->error();
d->serverSocketErrorString = d->socketEngine->errorString();
return false;
@@ -650,6 +650,35 @@ int QTcpServer::maxPendingConnections() const
}
/*!
+ Sets the backlog queue size of to be accepted connections to \a
+ size. The operating system might reduce or ignore this value.
+ By default, the queue size is 50.
+
+ \note This setting is only used when listen() is called.
+
+ \since 6.3
+
+ \sa listenBacklog()
+*/
+void QTcpServer::setListenBacklog(int size)
+{
+ d_func()->listenBacklog = size;
+}
+
+/*!
+ Returns the backlog queue size of to be accepted connections. The
+ default is 50.
+
+ \since 6.3
+
+ \sa setListenBacklog()
+*/
+int QTcpServer::listenBacklog() const
+{
+ return d_func()->listenBacklog;
+}
+
+/*!
Returns an error code for the last error that occurred.
\sa errorString()
diff --git a/src/network/socket/qtcpserver.h b/src/network/socket/qtcpserver.h
index 37df12919f..c6f5eb3e7f 100644
--- a/src/network/socket/qtcpserver.h
+++ b/src/network/socket/qtcpserver.h
@@ -69,6 +69,9 @@ public:
void setMaxPendingConnections(int numConnections);
int maxPendingConnections() const;
+ void setListenBacklog(int size);
+ int listenBacklog() const;
+
quint16 serverPort() const;
QHostAddress serverAddress() const;
diff --git a/src/network/socket/qtcpserver_p.h b/src/network/socket/qtcpserver_p.h
index 6ee8c5f0b1..8fa9b6337b 100644
--- a/src/network/socket/qtcpserver_p.h
+++ b/src/network/socket/qtcpserver_p.h
@@ -83,6 +83,7 @@ public:
QAbstractSocket::SocketError serverSocketError;
QString serverSocketErrorString;
+ int listenBacklog = 50;
int maxConnections;
#ifndef QT_NO_NETWORKPROXY
diff --git a/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp b/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
index 88a39eea93..23566a3d70 100644
--- a/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
+++ b/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
@@ -324,7 +324,7 @@ void tst_PlatformSocketEngine::serverTest()
quint16 port = server.localPort();
// Listen for incoming connections
- QVERIFY(server.listen());
+ QVERIFY(server.listen(50));
QCOMPARE(server.state(), QAbstractSocket::ListeningState);
// Initialize a Tcp socket
@@ -429,7 +429,7 @@ void tst_PlatformSocketEngine::tcpLoopbackPerformance()
quint16 port = server.localPort();
// Listen for incoming connections
- QVERIFY(server.listen());
+ QVERIFY(server.listen(50));
QCOMPARE(server.state(), QAbstractSocket::ListeningState);
// Initialize a Tcp socket
@@ -620,7 +620,7 @@ void tst_PlatformSocketEngine::receiveUrgentData()
QCOMPARE(server.state(), QAbstractSocket::BoundState);
quint16 port = server.localPort();
- QVERIFY(server.listen());
+ QVERIFY(server.listen(50));
QCOMPARE(server.state(), QAbstractSocket::ListeningState);
PLATFORMSOCKETENGINE client;
diff --git a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp
index f0cff5da3e..7bf057cd5a 100644
--- a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp
+++ b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp
@@ -453,7 +453,7 @@ void tst_QSocks5SocketEngine::serverTest()
QCOMPARE(server.state(), QAbstractSocket::BoundState);
// Listen for incoming connections
- QVERIFY(server.listen());
+ QVERIFY(server.listen(50));
QCOMPARE(server.state(), QAbstractSocket::ListeningState);
// Initialize a Tcp socket