diff options
author | Jonas M. Gastal <jgastal@gmail.com> | 2012-06-11 22:27:03 -0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-26 04:03:51 +0200 |
commit | 4920090da0fc937d171065694d5274221d2747c9 (patch) | |
tree | 8959b519b3ebcf772fee2db640c0b2b4818a6e85 /src/network/socket/qtcpserver.cpp | |
parent | aa9728450cc515c66545323646c66d826a1af50a (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.cpp | 42 |
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 |