From 1ee75e47401d0ed4646d4fef7ce8e09eb90f4d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Tue, 16 Aug 2022 15:51:10 +0200 Subject: QSslServer: Make sure maxPendingConnections applies to all sockets Not just the ones we added to the pending sockets list Pick-to: 6.4 Change-Id: I0a0016fe39df7ca2fc3f0c4e4111195bc6d90198 Reviewed-by: Konrad Kujawa Reviewed-by: Timur Pocheptsov Reviewed-by: Edward Welbourne --- src/network/socket/qtcpserver.cpp | 16 +++++++++++++++- src/network/socket/qtcpserver_p.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'src/network/socket') diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp index 95d1877a5d..e6ff34cee9 100644 --- a/src/network/socket/qtcpserver.cpp +++ b/src/network/socket/qtcpserver.cpp @@ -172,7 +172,7 @@ void QTcpServerPrivate::readNotification() { Q_Q(QTcpServer); for (;;) { - if (pendingConnections.count() >= maxConnections) { + if (totalPendingConnections() >= maxConnections) { #if defined (QTCPSERVER_DEBUG) qDebug("QTcpServerPrivate::_q_processIncomingConnection() too many connections"); #endif @@ -205,6 +205,20 @@ void QTcpServerPrivate::readNotification() } } +/*! + \internal + Return the amount of sockets currently in queue for the server. + This is to make maxPendingConnections work properly with servers that don't + necessarily have 'ready-to-go' sockets as soon as they connect, + e.g. QSslServer. + By default we just return pendingConnections.size(), which is equivalent to + what it did before. +*/ +int QTcpServerPrivate::totalPendingConnections() const +{ + return int(pendingConnections.size()); +} + /*! Constructs a QTcpServer object. diff --git a/src/network/socket/qtcpserver_p.h b/src/network/socket/qtcpserver_p.h index a526549538..853a4aaf96 100644 --- a/src/network/socket/qtcpserver_p.h +++ b/src/network/socket/qtcpserver_p.h @@ -56,6 +56,7 @@ public: #endif virtual void configureCreatedSocket(); + virtual int totalPendingConnections() const; // from QAbstractSocketEngineReceiver void readNotification() override; -- cgit v1.2.3