Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-40427

[Windows]: With some https URLs there is no read notification during the handshake phase so it just ends up failing

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P1: Critical
    • Resolution: Invalid
    • Affects Version/s: 5.3.1
    • Fix Version/s: None
    • Component/s: Network: SSL
    • Environment:
      Windows 7

      Description

      [Windows]: With some https URLs there is no read notification during the handshake phase so it just ends up failing. This however does not happen on Mac and also works fine with other https URLs too.

      The debug output for the URL - https://gsu.view.usg.edu - is:

      systemCaCertificates retrieval time  9 ms
      imported  53  certificates
      QAbstractSocket::QAbstractSocket(TcpSocket, QAbstractSocketPrivate == 0x44fa110, parent == 0x15fc84)
      QSslSocket::QSslSocket( SslClient(0x15fc84, name = "Form") ), this = 0x351de8
      QSslSocket::connectToHost( "gsu.view.usg.edu" , 443 , OpenMode( "ReadOnly|WriteOnly" ) )
              creating internal plain socket
      QAbstractSocket::QAbstractSocket(TcpSocket, QAbstractSocketPrivate == 0x450e9d0, parent == 0x351de8)
      QTcpSocket::QTcpSocket()
      QAbstractSocket::connectToHost("gsu.view.usg.edu", 443, 3)...
      QSslSocket::_q_stateChangedSlot( QAbstractSocket::HostLookupState )
      QHostInfo::lookupHost("gsu.view.usg.edu", 0x352130, _q_startConnecting(QHostInfo))
      QAbstractSocket::connectToHost("gsu.view.usg.edu", 443) == false (connection in progress)
      QHostInfoAgent::fromName(): looking up "gsu.view.usg.edu" (IPv6 support is enabled)
      QHostInfoAgent::run(): found 1 entries: {168.24.92.122}
      QAbstractSocketPrivate::_q_startConnecting(hostInfo == {168.24.92.122})
      QSslSocket::_q_stateChangedSlot( QAbstractSocket::ConnectingState )
      QSslSocket::_q_hostFoundSlot()
              state = QAbstractSocket::ConnectingState
      QAbstractSocketPrivate::_q_connectToNextAddress(), connecting to 168.24.92.122:443, 1 left to try
      QAbstractSocketPrivate::resetSocketLayer()
      QAbstractSocketPrivate::initSocketLayer(TcpSocket, IPv4Protocol) success
      QNativeSocketEnginePrivate::nativeConnect() to 168.24.92.122 :: 443
      WSA error : WSAEWOULDBLOCK
      more details (A non-blocking socket operation could not be completed immediately.)
      QNativeSocketEnginePrivate::nativeConnect(168.24.92.122, 443) == false (Connection in progress)
      QNativeSocketEnginePrivate::nativeConnect() to 168.24.92.122 :: 443
      WSA error : WSAEISCONN
      more details (A connect request was made on an already connected socket.)
      QNativeSocketEnginePrivate::nativeConnect(168.24.92.122, 443) == true
      QNativeSocketEnginePrivate::fetchConnectionParameters() localAddress == 10.10.121.142, localPort = 54346, peerAddress == 168.24.92.122, peerPort = 443, socketProtocol == IPv4Protocol, socketType == TcpSocket
      QAbstractSocketPrivate::connectionNotification() testing connection
      QSslSocket::_q_stateChangedSlot( QAbstractSocket::ConnectedState )
      QSslSocket::_q_connectedSlot()
              state = QAbstractSocket::ConnectedState
              peer = "gsu.view.usg.edu"  QHostAddress( "168.24.92.122" )  443
      QHostInfo::fromName("10.10.121.142")
      QHostInfoAgent::fromName(): looking up "10.10.121.142" (IPv6 support is enabled)
              local = "IT-L-JGY1PX1.it.local"  QHostAddress( "10.10.121.142" )  54346
      QSslSocket::startClientEncryption()
      QAbstractSocket::writeData(0x15c08c "\26\3\1\1E\1\0\1A\3\3S\37777777722\r\37777777624\37777777701^\37777777755\37777777703r\37777777723\37777777773X\37777777661\37777777653whR\17\37777777651L\37777777620...", 330) == 330
      QSslSocketBackendPrivate::transmit: wrote 330 encrypted bytes to the socket 330 actual.
      QAbstractSocket::bytesAvailable() == 0
      QSslSocketBackendPrivate::transmit: testing encryption
      QSslSocketBackendPrivate::transmit: encryption not done yet
      QAbstractSocket::bytesAvailable() == 0
      QSslSocketBackendPrivate::transmit: testing encryption
      QSslSocketBackendPrivate::transmit: encryption not done yet
      QAbstractSocketPrivate::fetchConnectionParameters() connection to 168.24.92.122:443 established
      QAbstractSocketPrivate::canWriteNotification() flushing
      QNativeSocketEnginePrivate::nativeWrite(0x4544680 "\26\3\1\1E\1\0\1A\3\3S\37777777722\r\37777777624\37777777701...", 330) == 330
      QAbstractSocketPrivate::flush() 330 bytes written to the network
      QSslSocket::_q_bytesWrittenSlot( 330 )
      

      This was done with the securesocketclient example setting the port to 443, doing the same thing with www.amazon.co.uk works fine.

        Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

            Assignee:
            richmoore Richard Moore (qtnetwork)
            Reporter:
            andysh Andy Shaw
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved:

                Gerrit Reviews

                There are no open Gerrit changes