summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qtcpserver.cpp
diff options
context:
space:
mode:
authorJonas M. Gastal <jgastal@gmail.com>2012-06-11 22:27:03 -0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-09-26 04:03:51 +0200
commit4920090da0fc937d171065694d5274221d2747c9 (patch)
tree8959b519b3ebcf772fee2db640c0b2b4818a6e85 /src/network/socket/qtcpserver.cpp
parentaa9728450cc515c66545323646c66d826a1af50a (diff)
If accept fails, stop accepting new connections and emit error signal.
Task-number: QTBUG-24778 Change-Id: I6c5b685b3f861a0fafc1475c41bb35cede17d712 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/network/socket/qtcpserver.cpp')
-rw-r--r--src/network/socket/qtcpserver.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp
index 331db627dd..90419502ba 100644
--- a/src/network/socket/qtcpserver.cpp
+++ b/src/network/socket/qtcpserver.cpp
@@ -90,6 +90,15 @@
\sa hasPendingConnections(), nextPendingConnection()
*/
+/*! \fn void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
+ \since 5.0
+
+ This signal is emitted when accepting a new connection results in an error.
+ The \a socketError parameter describes the type of error that occurred.
+
+ \sa pauseAccepting(), resumeAccepting()
+*/
+
#include "qtcpserver.h"
#include "private/qobject_p.h"
#include "qalgorithms.h"
@@ -209,8 +218,15 @@ void QTcpServerPrivate::readNotification()
}
int descriptor = socketEngine->accept();
- if (descriptor == -1)
+ if (descriptor == -1) {
+ if (socketEngine->error() != QAbstractSocket::TemporaryError) {
+ q->pauseAccepting();
+ serverSocketError = socketEngine->error();
+ serverSocketErrorString = socketEngine->errorString();
+ emit q->acceptError(serverSocketError);
+ }
break;
+ }
#if defined (QTCPSERVER_DEBUG)
qDebug("QTcpServerPrivate::_q_processIncomingConnection() accepted socket %i", descriptor);
#endif
@@ -650,6 +666,30 @@ QString QTcpServer::errorString() const
return d_func()->serverSocketErrorString;
}
+/*!
+ \since 5.0
+
+ Pauses accepting new connections. Queued connections will remain in queue.
+
+ \sa resumeAccepting()
+*/
+void QTcpServer::pauseAccepting()
+{
+ d_func()->socketEngine->setReadNotificationEnabled(false);
+}
+
+/*!
+ \since 5.0
+
+ Resumes accepting new connections.
+
+ \sa pauseAccepting()
+*/
+void QTcpServer::resumeAccepting()
+{
+ d_func()->socketEngine->setReadNotificationEnabled(true);
+}
+
#ifndef QT_NO_NETWORKPROXY
/*!
\since 4.1