do not manually set the socket state and error of QTcpServer

that means that once the socket engine is closed the error becomes unknown
tho

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-12-26 01:59:24 +02:00
parent 26907fbee7
commit 67b6c14005

View file

@ -102,12 +102,8 @@ public:
quint16 port; quint16 port;
QHostAddress address; QHostAddress address;
QAbstractSocket::SocketState state;
QAbstractSocketEngine *socketEngine; QAbstractSocketEngine *socketEngine;
QAbstractSocket::SocketError serverSocketError;
QString serverSocketErrorString;
int maxConnections; int maxConnections;
// from QAbstractSocketEngineReceiver // from QAbstractSocketEngineReceiver
@ -121,9 +117,7 @@ public:
*/ */
QTcpServerPrivate::QTcpServerPrivate() QTcpServerPrivate::QTcpServerPrivate()
: port(0), : port(0),
state(QAbstractSocket::UnconnectedState),
socketEngine(nullptr), socketEngine(nullptr),
serverSocketError(QAbstractSocket::UnknownSocketError),
maxConnections(30) maxConnections(30)
{ {
} }
@ -203,7 +197,7 @@ QTcpServer::~QTcpServer()
bool QTcpServer::listen(const QHostAddress &address, quint16 port) bool QTcpServer::listen(const QHostAddress &address, quint16 port)
{ {
Q_D(QTcpServer); Q_D(QTcpServer);
if (Q_UNLIKELY(d->state == QAbstractSocket::ListeningState)) { if (Q_UNLIKELY(isListening())) {
qWarning("QTcpServer::listen() called when already listening"); qWarning("QTcpServer::listen() called when already listening");
return false; return false;
} }
@ -211,8 +205,6 @@ bool QTcpServer::listen(const QHostAddress &address, quint16 port)
delete d->socketEngine; delete d->socketEngine;
d->socketEngine = new QAbstractSocketEngine(this); d->socketEngine = new QAbstractSocketEngine(this);
if (!d->socketEngine->initialize(QAbstractSocket::TcpSocket, address.protocol())) { if (!d->socketEngine->initialize(QAbstractSocket::TcpSocket, address.protocol())) {
d->serverSocketError = d->socketEngine->error();
d->serverSocketErrorString = d->socketEngine->errorString();
return false; return false;
} }
@ -227,21 +219,16 @@ bool QTcpServer::listen(const QHostAddress &address, quint16 port)
d->socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1); d->socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1);
if (!d->socketEngine->bind(address, port)) { if (!d->socketEngine->bind(address, port)) {
d->serverSocketError = d->socketEngine->error();
d->serverSocketErrorString = d->socketEngine->errorString();
return false; return false;
} }
if (!d->socketEngine->listen()) { if (!d->socketEngine->listen()) {
d->serverSocketError = d->socketEngine->error();
d->serverSocketErrorString = d->socketEngine->errorString();
return false; return false;
} }
d->socketEngine->setReceiver(d); d->socketEngine->setReceiver(d);
d->socketEngine->setReadNotificationEnabled(true); d->socketEngine->setReadNotificationEnabled(true);
d->state = QAbstractSocket::ListeningState;
d->address = d->socketEngine->localAddress(); d->address = d->socketEngine->localAddress();
d->port = d->socketEngine->localPort(); d->port = d->socketEngine->localPort();
@ -283,8 +270,6 @@ void QTcpServer::close()
d->socketEngine->deleteLater(); d->socketEngine->deleteLater();
d->socketEngine = 0; d->socketEngine = 0;
} }
d->state = QAbstractSocket::UnconnectedState;
} }
/*! /*!
@ -320,11 +305,9 @@ bool QTcpServer::setSocketDescriptor(int socketDescriptor)
delete d->socketEngine; delete d->socketEngine;
d->socketEngine = new QAbstractSocketEngine(this); d->socketEngine = new QAbstractSocketEngine(this);
if (!d->socketEngine->initialize(socketDescriptor, QAbstractSocket::ListeningState)) { if (!d->socketEngine->initialize(socketDescriptor, QAbstractSocket::ListeningState)) {
d->serverSocketError = d->socketEngine->error();
d->serverSocketErrorString = d->socketEngine->errorString();
#if defined (QTCPSERVER_DEBUG) #if defined (QTCPSERVER_DEBUG)
qDebug("QTcpServer::setSocketDescriptor(%i) failed (%s)", socketDescriptor, qDebug("QTcpServer::setSocketDescriptor(%i) failed (%s)", socketDescriptor,
d->serverSocketErrorString.toLatin1().constData()); d->socketEngine->errorString().toLatin1().constData());
#endif #endif
return false; return false;
} }
@ -332,7 +315,6 @@ bool QTcpServer::setSocketDescriptor(int socketDescriptor)
d->socketEngine->setReceiver(d); d->socketEngine->setReceiver(d);
d->socketEngine->setReadNotificationEnabled(true); d->socketEngine->setReadNotificationEnabled(true);
d->state = d->socketEngine->state();
d->address = d->socketEngine->localAddress(); d->address = d->socketEngine->localAddress();
d->port = d->socketEngine->localPort(); d->port = d->socketEngine->localPort();
@ -390,12 +372,10 @@ QHostAddress QTcpServer::serverAddress() const
bool QTcpServer::waitForNewConnection(int msec, bool *timedOut) bool QTcpServer::waitForNewConnection(int msec, bool *timedOut)
{ {
Q_D(QTcpServer); Q_D(QTcpServer);
if (d->state != QAbstractSocket::ListeningState) if (!isListening())
return false; return false;
if (!d->socketEngine->waitForRead(msec, timedOut)) { if (!d->socketEngine->waitForRead(msec, timedOut)) {
d->serverSocketError = d->socketEngine->error();
d->serverSocketErrorString = d->socketEngine->errorString();
return false; return false;
} }
@ -532,7 +512,9 @@ int QTcpServer::maxPendingConnections() const
*/ */
QAbstractSocket::SocketError QTcpServer::serverError() const QAbstractSocket::SocketError QTcpServer::serverError() const
{ {
return d_func()->serverSocketError; Q_D(const QTcpServer);
Q_CHECK_SOCKETENGINE(QAbstractSocket::UnknownSocketError);
return d_func()->socketEngine->error();
} }
/*! /*!
@ -543,7 +525,9 @@ QAbstractSocket::SocketError QTcpServer::serverError() const
*/ */
QString QTcpServer::errorString() const QString QTcpServer::errorString() const
{ {
return d_func()->serverSocketErrorString; Q_D(const QTcpServer);
Q_CHECK_SOCKETENGINE(tr("Unknown error"));
return d->socketEngine->errorString();
} }
QT_END_NAMESPACE QT_END_NAMESPACE