From e095fa7f9cb994ec2b2639b58a3c0d822d4d2cf6 Mon Sep 17 00:00:00 2001 From: Daniel Nicoletti Date: Tue, 29 Jun 2021 16:37:41 -0300 Subject: 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 Reviewed-by: Giuseppe D'Angelo --- src/network/socket/qtcpserver.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src/network/socket/qtcpserver.cpp') 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; @@ -649,6 +649,35 @@ int QTcpServer::maxPendingConnections() const return d_func()->maxConnections; } +/*! + 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. -- cgit v1.2.3