Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QWebSocket closeCode always 1000 and QAbstractSocket::RemoteHostClosedError
Qt 6.11 is out! See what's new in the release blog

QWebSocket closeCode always 1000 and QAbstractSocket::RemoteHostClosedError

Scheduled Pinned Locked Moved Unsolved General and Desktop
4 Posts 4 Posters 1.1k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • XardasX Offline
    XardasX Offline
    Xardas
    wrote on last edited by
    #1

    example server:

    wsstestsrv::wsstestsrv(QObject *parent)
    	: QObject(parent)
    {
    	srv = new QWebSocketServer(QStringLiteral("test"), QWebSocketServer::SecureMode, this);
    	srv->setSslConfiguration(sslConf);
    
    	if (srv->listen(QHostAddress::AnyIPv4, 13000))
    	{
    		qDebug() << QString("Listen on: %1 port: %2").arg(srv->serverAddress().toString()).arg(srv->serverPort());
    		connect(srv, &QWebSocketServer::newConnection, this, &wsstestsrv::onNewConnection);
    	}
    	else
    		qDebug() << srv->errorString();
    }
    
    void wsstestsrv::onNewConnection()
    {
    	QWebSocket *socket = srv->nextPendingConnection();
    
    	connect(socket, &QWebSocket::connected, [=]() { qDebug() << "connected!"; });
    	connect(socket, &QWebSocket::disconnected, [=]() { qDebug() << "disconnected!" << socket->closeCode();  });
    
    	typedef void (QWebSocket:: *sslErrorsSignal)(const QList<QSslError> &);
    	connect(socket, static_cast<sslErrorsSignal>(&QWebSocket::sslErrors),
    		[&](const QList<QSslError> &errors) {
    		for (const QSslError &e : errors)
    			qDebug() << e; });
    	connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), [&](QAbstractSocket::SocketError e) {qDebug() << e; });
    }
    

    example client:

    wssclient::wssclient(QObject *parent)
    	: QObject(parent)
    {
    	socket = new QWebSocket();
    	connect(socket, &QWebSocket::connected, [&]() { qDebug() << "connected!"; });
    	connect(socket, &QWebSocket::disconnected, [&]() { qDebug() << "disconnected!"; });
    
    	typedef void (QWebSocket:: *sslErrorsSignal)(const QList<QSslError> &);
    	connect(socket, static_cast<sslErrorsSignal>(&QWebSocket::sslErrors),
    		[&](const QList<QSslError> &errors) {
    		for (const QSslError &e : errors)
    			qDebug() << e;
    		socket->ignoreSslErrors(); });
    	connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), [&](QAbstractSocket::SocketError e) {qDebug() << e; });
    
    	socket->open(QUrl("wss://127.0.0.1:13000"));
    
    	QTimer::singleShot(3000, [&]() {socket->close(QWebSocketProtocol::CloseCodeGoingAway); });
    }
    

    Hi,
    First problem:
    After remote client close, server socket randomly emit QAbstractSocket::RemoteHostClosedError (not every close)
    Second:
    closedCode always 1000(NORMAL)

    any advices how to fix this?

    P.S.(Qt 5.10/Windows 10 Pro)

    1 Reply Last reply
    0
    • A Offline
      A Offline
      ARasotorguev
      wrote on last edited by
      #2

      @Xardas You find solution for this problem?
      We has the same local ws and websocket closed with error RemoteHostClosedError

      1 Reply Last reply
      0
      • W Offline
        W Offline
        wanjm
        wrote on last edited by
        #3

        I come across the same problem.
        is it a bug?

        1 Reply Last reply
        0
        • A Offline
          A Offline
          AlexGuo1998
          wrote on last edited by AlexGuo1998
          #4

          After some debugging it seems to be a bug fixed in Qt 6.4. (and backported in 6.2/6.3)
          According to the old code, QWebSocketPrivate::processData used to be connected using Qt::QueuedConnection, so it may be called after QWebSocketPrivate::processStateChanged. This means the close frame can be unprocessed, leaving closedCode in 1000.
          The commit fixing this is e1c92b57.

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved