summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qtcpserver.cpp
diff options
context:
space:
mode:
authorDaniel Nicoletti <daniel.nicoletti@kdab.com>2021-06-29 16:37:41 -0300
committerDaniel Nicoletti <daniel.nicoletti@kdab.com>2021-07-19 17:05:53 -0300
commite095fa7f9cb994ec2b2639b58a3c0d822d4d2cf6 (patch)
tree3f71467e3a39062c1f7b95cfd6b98e9c4d174ba8 /src/network/socket/qtcpserver.cpp
parent0f32703aa5aee46bb2c0bfe9c8e54f05b82cf0f3 (diff)
Allow to set TCP network listen(2) backlog
Qt has a hardcoded backlog value of 50, this allows for applications to tune this value. Modern kernels have the SYN cookie feature that reduces pressure from an flood attack, the backlog setting however is then a queue for most likely real completed (SYN/ACK) connections hence, it's easy to get clients connections dropped with this very small limit. [ChangeLog][QtNetwork][QTcpServer] Added QTcpServer::setListenBacklog() to be able to have control over the listen backlog feature. Change-Id: I1c78af6d99e012591e214b7e09fa85c485880d48 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'src/network/socket/qtcpserver.cpp')
-rw-r--r--src/network/socket/qtcpserver.cpp31
1 files changed, 30 insertions, 1 deletions
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()