Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QUdpSocket bind problem
Qt 6.12 LTS is out! See what's new in the release blog

QUdpSocket bind problem

Scheduled Pinned Locked Moved Solved General and Desktop
27 Posts 5 Posters 18.4k Views 1 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.
  • HansonH Offline
    HansonH Offline
    Hanson
    wrote on last edited by
    #8

    @JulsPower Hi
    Maybe you can check what the error value for m_UdpSocket->state() means first.
    https://doc.qt.io/qt-6/qabstractsocket.html#SocketState-enum

    1 Reply Last reply
    0
    • J Offline
      J Offline
      JulsPower
      wrote on last edited by
      #9

      Ok I changed the init function to be more like it should be

          ui->setupUi(this);
          m_UdpSocket = new QUdpSocket(this);
          bool b;
          b = m_UdpSocket->bind(QHostAddress::Any, 55555);
          auto state = m_UdpSocket->state();
          QMessageBox::information(this, "info", QString(b?"true ":"false ") + QString::number(state));
          connect(m_UdpSocket, &QUdpSocket::readyRead, this, &MainWindow::readPendingDatagrams);
          connect(m_UdpSocket, &QUdpSocket::errorOccurred, this, &MainWindow::errorOccurred);
      
      

      if I debug the message box show false 0 (which is unconnected)
      and if I run the debug version it shows true 4

      errorOccurred is never called

      HansonH 1 Reply Last reply
      0
      • J JulsPower

        Ok I changed the init function to be more like it should be

            ui->setupUi(this);
            m_UdpSocket = new QUdpSocket(this);
            bool b;
            b = m_UdpSocket->bind(QHostAddress::Any, 55555);
            auto state = m_UdpSocket->state();
            QMessageBox::information(this, "info", QString(b?"true ":"false ") + QString::number(state));
            connect(m_UdpSocket, &QUdpSocket::readyRead, this, &MainWindow::readPendingDatagrams);
            connect(m_UdpSocket, &QUdpSocket::errorOccurred, this, &MainWindow::errorOccurred);
        
        

        if I debug the message box show false 0 (which is unconnected)
        and if I run the debug version it shows true 4

        errorOccurred is never called

        HansonH Offline
        HansonH Offline
        Hanson
        wrote on last edited by
        #10

        @JulsPower
        You can now use error() or errorString() to see the actual error message.
        https://doc.qt.io/qt-6/qabstractsocket.html#error
        https://doc.qt.io/qt-6/qiodevice.html#errorString

        1 Reply Last reply
        0
        • J Offline
          J Offline
          JulsPower
          wrote on last edited by
          #11

          indeed
          QMessageBox::information(this, "info", QString(b?"true ":"false ") + QString::number(state) + m_UdpSocket->errorString());
          return unknow error :(

          1 Reply Last reply
          0
          • HansonH Offline
            HansonH Offline
            Hanson
            wrote on last edited by
            #12

            @JulsPower What is return value of error().

            J 1 Reply Last reply
            0
            • HansonH Hanson

              @JulsPower What is return value of error().

              J Offline
              J Offline
              JulsPower
              wrote on last edited by
              #13

              @Hanson said in QUdpSocket bind problem:

              @JulsPower What is return value of error().

              -1

              1 Reply Last reply
              0
              • HansonH Offline
                HansonH Offline
                Hanson
                wrote on last edited by
                #14

                @JulsPower
                I checked the relevant source code and I can see that the error code without an error message could be WSANOTINITIALISED, which stands for WSAStartup failed. I guess it could be a mismatch or missing winsock library in the debug environment.
                https://learn.microsoft.com/zh-cn/windows/win32/winsock/windows-sockets-error-codes-2

                bool QNativeSocketEnginePrivate::nativeBind(const QHostAddress &a, quint16 port)
                {
                    QHostAddress address = a;
                    if (address.protocol() == QAbstractSocket::IPv4Protocol) {
                        if ((address.toIPv4Address() & 0xffff0000) == 0xefff0000) {
                            // binding to a multicast address
                            address = QHostAddress(QHostAddress::AnyIPv4);
                        }
                    }
                
                    qt_sockaddr aa;
                    QT_SOCKLEN_T sockAddrSize = 0;
                    setPortAndAddress(port, address, &aa, &sockAddrSize);
                
                    if (aa.a.sa_family == AF_INET6) {
                        // The default may change in future, so set it explicitly
                        int ipv6only = 0;
                        if (address.protocol() == QAbstractSocket::IPv6Protocol)
                            ipv6only = 1;
                        ::setsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&ipv6only, sizeof(ipv6only) );
                    }
                
                
                    int bindResult = ::bind(socketDescriptor, &aa.a, sockAddrSize);
                    if (bindResult == SOCKET_ERROR && WSAGetLastError() == WSAEAFNOSUPPORT
                            && address.protocol() == QAbstractSocket::AnyIPProtocol) {
                        // retry with v4
                        aa.a4.sin_family = AF_INET;
                        aa.a4.sin_port = htons(port);
                        aa.a4.sin_addr.s_addr = htonl(address.toIPv4Address());
                        sockAddrSize = sizeof(aa.a4);
                        bindResult = ::bind(socketDescriptor, &aa.a, sockAddrSize);
                    }
                    if (bindResult == SOCKET_ERROR) {
                        int err = WSAGetLastError();
                        WS_ERROR_DEBUG(err);
                        switch (err) {
                        case WSANOTINITIALISED:
                            //###
                            break;
                        case WSAEADDRINUSE:
                        case WSAEINVAL:
                            setError(QAbstractSocket::AddressInUseError, AddressInuseErrorString);
                            break;
                        case WSAEACCES:
                            setError(QAbstractSocket::SocketAccessError, AddressProtectedErrorString);
                            break;
                        case WSAEADDRNOTAVAIL:
                            setError(QAbstractSocket::SocketAddressNotAvailableError, AddressNotAvailableErrorString);
                            break;
                        default:
                            break;
                        }
                
                #if defined (QNATIVESOCKETENGINE_DEBUG)
                        qDebug("QNativeSocketEnginePrivate::nativeBind(%s, %i) == false (%s)",
                               address.toString().toLatin1().constData(), port, socketErrorString.toLatin1().constData());
                #endif
                
                        return false;
                    }
                
                #if defined (QNATIVESOCKETENGINE_DEBUG)
                    qDebug("QNativeSocketEnginePrivate::nativeBind(%s, %i) == true",
                           address.toString().toLatin1().constData(), port);
                #endif
                    socketState = QAbstractSocket::BoundState;
                    return true;
                }
                
                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  JulsPower
                  wrote on last edited by
                  #15

                  Interesting
                  would you know a way to confirm this? and even more fix it?

                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    JulsPower
                    wrote on last edited by
                    #16

                    I did update to qt creator 17 with all debug symbol, issue remain

                    1 Reply Last reply
                    0
                    • HansonH Offline
                      HansonH Offline
                      Hanson
                      wrote on last edited by Hanson
                      #17

                      @JulsPower
                      You can try the following code before executing the bind() function

                      #include <winsock2.h>
                      #include <ws2tcpip.h>
                      #pragma comment(lib, "ws2_32.lib")
                      
                      ....
                      WSAData wsadata;
                      int err = WSAStartup(MAKEWORD(2,0), &wsadata);
                      if (err != 0) {
                              qWarning("QTcpSocketAPI: WinSock v2.0 initialization failed.");
                          } 
                      ....
                      
                      J 1 Reply Last reply
                      0
                      • HansonH Hanson

                        @JulsPower
                        You can try the following code before executing the bind() function

                        #include <winsock2.h>
                        #include <ws2tcpip.h>
                        #pragma comment(lib, "ws2_32.lib")
                        
                        ....
                        WSAData wsadata;
                        int err = WSAStartup(MAKEWORD(2,0), &wsadata);
                        if (err != 0) {
                                qWarning("QTcpSocketAPI: WinSock v2.0 initialization failed.");
                            } 
                        ....
                        
                        J Offline
                        J Offline
                        JulsPower
                        wrote on last edited by
                        #18

                        @Hanson said in QUdpSocket bind problem:

                        @JulsPower
                        You can try the following code before executing the bind() function

                        #include <winsock2.h>
                        #include <ws2tcpip.h>
                        #pragma comment(lib, "ws2_32.lib")
                        
                        ....
                        WSAData wsadata;
                        int err = WSAStartup(MAKEWORD(2,0), &wsadata);
                        if (err != 0) {
                                qWarning("QTcpSocketAPI: WinSock v2.0 initialization failed.");
                            } 
                        ....
                        

                        WSAStartup return 0 so no error there
                        but the bind function continue to return false

                        1 Reply Last reply
                        0
                        • HansonH Offline
                          HansonH Offline
                          Hanson
                          wrote on last edited by
                          #19

                          @JulsPower
                          emmm... I can't figure it out anymore :)
                          Or you can download the qt source code and debug it.

                          1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            JulsPower
                            wrote on last edited by
                            #20

                            WSAGetLastError return error 10106 (WSAEPROVIDERFAILEDINIT)
                            gives you an idea??

                            HansonH 1 Reply Last reply
                            0
                            • J JulsPower

                              WSAGetLastError return error 10106 (WSAEPROVIDERFAILEDINIT)
                              gives you an idea??

                              HansonH Offline
                              HansonH Offline
                              Hanson
                              wrote on last edited by
                              #21

                              @JulsPower
                              Can you show me where in your code calling WSAGetLastError()?

                              J 1 Reply Last reply
                              0
                              • HansonH Hanson

                                @JulsPower
                                Can you show me where in your code calling WSAGetLastError()?

                                J Offline
                                J Offline
                                JulsPower
                                wrote on last edited by
                                #22

                                @Hanson said in QUdpSocket bind problem:

                                @JulsPower
                                Can you show me where in your code calling WSAGetLastError()?

                                b = m_UdpSocket->bind(QHostAddress::Any, 55555);
                                auto state = m_UdpSocket->state();
                                QMessageBox::information(this, "info", QString(b?"true ":"false ") + QString::number(state) + QString::number(WSAGetLastError()));
                                

                                show while debugging it shows false 010106

                                1 Reply Last reply
                                0
                                • J Offline
                                  J Offline
                                  JulsPower
                                  wrote on last edited by JulsPower
                                  #23

                                  I replicated the samething in a new project using qmake instead of cmake. lo and behold it works in debugging mode...
                                  seem ill be using qmake

                                  HansonH 1 Reply Last reply
                                  0
                                  • J JulsPower

                                    I replicated the samething in a new project using qmake instead of cmake. lo and behold it works in debugging mode...
                                    seem ill be using qmake

                                    HansonH Offline
                                    HansonH Offline
                                    Hanson
                                    wrote on last edited by Hanson
                                    #24

                                    @JulsPower
                                    Maybe same as this question
                                    https://stackoverflow.com/questions/48597996/qtcpserver-return-unknown-error-on-listen-function-only-under-debugger
                                    https://developercommunity.visualstudio.com/t/native-cmake-support-application-debug-launch-is-b/562174

                                    So the reason could be that when debugging the program with cmake project, the environment variables were cleared and the SystemRoot variable was missing, which caused WSASocket to fail to load the related components.

                                    1 Reply Last reply
                                    1
                                    • HansonH Offline
                                      HansonH Offline
                                      Hanson
                                      wrote on last edited by
                                      #25
                                      This post is deleted!
                                      1 Reply Last reply
                                      0
                                      • J Offline
                                        J Offline
                                        JulsPower
                                        wrote on last edited by
                                        #26

                                        seems like it
                                        thank you

                                        1 Reply Last reply
                                        0
                                        • J JulsPower has marked this topic as solved on
                                        • Kent-DorfmanK Offline
                                          Kent-DorfmanK Offline
                                          Kent-Dorfman
                                          wrote on last edited by Kent-Dorfman
                                          #27

                                          @JulsPower I understand you probably lack the motivation and time to do it, but it would be interesting to see the differences in the build between cmake generated makefile an qmake generated makfile. Obviously the two are building/linking differently. Smells like a build flag isn't the same in cmake debug

                                          The dystopian literature that served as a warning in my youth has become an instruction manual in my elder years.

                                          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
                                          • Unsolved