Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.1.1, 5.12.4
-
None
-
Windows 7
-
cc32226e647854a02ecd0775787bb08b85e2a014 (qt/qtbase/5.12)
Description
#include <QObject> #include <QCoreApplication> #include <QTcpSocket> #include <iostream> class Handler : public QObject { Q_OBJECT public: Handler(QObject *parent) : QObject(parent) { } ~Handler() { } public slots: void onConnected() { qDebug() << "Connected"; } void onError(QAbstractSocket::SocketError e) { qDebug() << "Error:" << e; } }; int main(int argc, char **argv) { QCoreApplication a(argc, argv); Handler *handler = new Handler(nullptr); QTcpSocket *socket = new QTcpSocket(nullptr); QObject::connect(socket, SIGNAL(connected()), handler, SLOT(onConnected())); QObject::connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), handler, SLOT(onError(QAbstractSocket::SocketError))); socket->connectToHost("0.0.0.1", 65000); return a.exec(); }
The expected output is "Error: QAbstractSocket::ConnectionRefusedError" after a short (<5 seconds) amount of time.
The actual output is "Error: QAbstractSocket::SocketTimeoutError" after much longer (~30 seconds) amount of time
However, adding line
socket->waitForConnected();
right after
socket->connectToHost("0.0.0.1", 65000);
makes the program to print the expected output in 5 seconds.
Apparently waitForConnected() remembers to call select() with non-zero errfds when on Windows, but whatever monitors the socket state in the event loop forgets this.
Attachments
Issue Links
- relates to
-
QTBUG-43236 QNativeSocketEnginePrivate::nativeConnect() for Windows is insane
-
- Open
-
For Gerrit Dashboard: QTBUG-42567 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
266885,7 | Windows: handle errors correctly when connecting to unreachable host | 5.12 | qt/qtbase | Status: MERGED | +2 | 0 |