diff options
Diffstat (limited to 'src/network/socket')
-rw-r--r-- | src/network/socket/qabstractsocket.cpp | 5 | ||||
-rw-r--r-- | src/network/socket/qhttpsocketengine.cpp | 5 | ||||
-rw-r--r-- | src/network/socket/qlocalserver_win.cpp | 10 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket.cpp | 2 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_p.h | 1 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_win.cpp | 22 | ||||
-rw-r--r-- | src/network/socket/qnativesocketengine_unix.cpp | 14 | ||||
-rw-r--r-- | src/network/socket/qnativesocketengine_win.cpp | 7 | ||||
-rw-r--r-- | src/network/socket/qsocks5socketengine.cpp | 17 |
9 files changed, 34 insertions, 49 deletions
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index a33dcb5955..2f93c5fa2b 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -1607,7 +1607,10 @@ bool QAbstractSocketPrivate::bind(const QHostAddress &address, quint16 port, QAb localPort = socketEngine->localPort(); emit q->stateChanged(state); - if (socketType == QAbstractSocket::UdpSocket) + // A slot attached to stateChanged() signal can break our invariant: + // by closing the socket it will reset its socket engine - thus we + // have additional check (isValid()) ... + if (q->isValid() && socketType == QAbstractSocket::UdpSocket) socketEngine->setReadNotificationEnabled(true); return true; } diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index b543ea7981..9427c3b00d 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -627,10 +627,9 @@ void QHttpSocketEngine::slotSocketReadNotification() // from http spec is also allowed. if (proxyConnectionHeader.isEmpty()) proxyConnectionHeader = d->reply->headerField("Connection"); - proxyConnectionHeader = proxyConnectionHeader.toLower(); - if (proxyConnectionHeader == "close") { + if (proxyConnectionHeader.compare("close", Qt::CaseSensitive) == 0) { willClose = true; - } else if (proxyConnectionHeader == "keep-alive") { + } else if (proxyConnectionHeader.compare("keep-alive", Qt::CaseInsensitive) == 0) { willClose = false; } else { // no Proxy-Connection header, so use the default diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp index ced923ced1..2d71a7e730 100644 --- a/src/network/socket/qlocalserver_win.cpp +++ b/src/network/socket/qlocalserver_win.cpp @@ -89,7 +89,7 @@ bool QLocalServerPrivate::addListener() DWORD dwBufferSize = 0; GetTokenInformation(hToken, TokenUser, 0, 0, &dwBufferSize); tokenUserBuffer.fill(0, dwBufferSize); - PTOKEN_USER pTokenUser = (PTOKEN_USER)tokenUserBuffer.data(); + auto pTokenUser = reinterpret_cast<PTOKEN_USER>(tokenUserBuffer.data()); if (!GetTokenInformation(hToken, TokenUser, pTokenUser, dwBufferSize, &dwBufferSize)) { setError(QLatin1String("QLocalServerPrivate::addListener")); CloseHandle(hToken); @@ -99,7 +99,7 @@ bool QLocalServerPrivate::addListener() dwBufferSize = 0; GetTokenInformation(hToken, TokenPrimaryGroup, 0, 0, &dwBufferSize); tokenGroupBuffer.fill(0, dwBufferSize); - PTOKEN_PRIMARY_GROUP pTokenGroup = (PTOKEN_PRIMARY_GROUP)tokenGroupBuffer.data(); + auto pTokenGroup = reinterpret_cast<PTOKEN_PRIMARY_GROUP>(tokenGroupBuffer.data()); if (!GetTokenInformation(hToken, TokenPrimaryGroup, pTokenGroup, dwBufferSize, &dwBufferSize)) { setError(QLatin1String("QLocalServerPrivate::addListener")); CloseHandle(hToken); @@ -140,7 +140,7 @@ bool QLocalServerPrivate::addListener() aclSize = (aclSize + (sizeof(DWORD) - 1)) & 0xfffffffc; aclBuffer.fill(0, aclSize); - PACL acl = (PACL)aclBuffer.data(); + auto acl = reinterpret_cast<PACL>(aclBuffer.data()); InitializeAcl(acl, aclSize, ACL_REVISION_DS); if (socketOptions & QLocalServer::UserAccessOption) { @@ -176,7 +176,7 @@ bool QLocalServerPrivate::addListener() } listener.handle = CreateNamedPipe( - (const wchar_t *)fullServerName.utf16(), // pipe name + reinterpret_cast<const wchar_t *>(fullServerName.utf16()), // pipe name PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, // read/write access PIPE_TYPE_BYTE | // byte type pipe PIPE_READMODE_BYTE | // byte-read mode @@ -299,7 +299,7 @@ void QLocalServerPrivate::_q_onNewConnection() tryAgain = true; // Make this the last thing so connected slots can wreak the least havoc - q->incomingConnection((quintptr)handle); + q->incomingConnection(reinterpret_cast<quintptr>(handle)); } else { if (GetLastError() != ERROR_IO_INCOMPLETE) { q->close(); diff --git a/src/network/socket/qlocalsocket.cpp b/src/network/socket/qlocalsocket.cpp index 6fec2fdbd2..1c34cd13ee 100644 --- a/src/network/socket/qlocalsocket.cpp +++ b/src/network/socket/qlocalsocket.cpp @@ -368,7 +368,7 @@ QLocalSocket::QLocalSocket(QObject * parent) */ QLocalSocket::~QLocalSocket() { - close(); + QLocalSocket::close(); #if !defined(Q_OS_WIN) && !defined(QT_LOCALSOCKET_TCP) Q_D(QLocalSocket); d->unixSocket.setParent(0); diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index 8b72da397f..d93b53be0c 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -131,7 +131,6 @@ public: #elif defined(Q_OS_WIN) ~QLocalSocketPrivate(); void destroyPipeHandles(); - void setErrorString(const QString &function); void _q_canWrite(); void _q_pipeClosed(); void _q_winError(ulong windowsError, const QString &function); diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index ae94cb9d51..d6ee76043f 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -50,12 +50,6 @@ void QLocalSocketPrivate::init() q->connect(pipeReader, SIGNAL(winError(ulong,QString)), SLOT(_q_winError(ulong,QString))); } -void QLocalSocketPrivate::setErrorString(const QString &function) -{ - DWORD windowsError = GetLastError(); - _q_winError(windowsError, function); -} - void QLocalSocketPrivate::_q_winError(ulong windowsError, const QString &function) { Q_Q(QLocalSocket); @@ -127,7 +121,8 @@ void QLocalSocket::connectToServer(OpenMode openMode) { Q_D(QLocalSocket); if (state() == ConnectedState || state() == ConnectingState) { - setErrorString(tr("Trying to connect while connection is in progress")); + d->error = OperationError; + d->errorString = tr("Trying to connect while connection is in progress"); emit error(QLocalSocket::OperationError); return; } @@ -137,8 +132,8 @@ void QLocalSocket::connectToServer(OpenMode openMode) d->state = ConnectingState; emit stateChanged(d->state); if (d->serverName.isEmpty()) { - d->error = QLocalSocket::ServerNotFoundError; - setErrorString(QLocalSocket::tr("%1: Invalid name").arg(QLatin1String("QLocalSocket::connectToServer"))); + d->error = ServerNotFoundError; + d->errorString = tr("%1: Invalid name").arg(QLatin1String("QLocalSocket::connectToServer")); d->state = UnconnectedState; emit error(d->error); emit stateChanged(d->state); @@ -155,7 +150,7 @@ void QLocalSocket::connectToServer(OpenMode openMode) forever { DWORD permissions = (openMode & QIODevice::ReadOnly) ? GENERIC_READ : 0; permissions |= (openMode & QIODevice::WriteOnly) ? GENERIC_WRITE : 0; - localSocket = CreateFile((const wchar_t *)d->fullServerName.utf16(), // pipe name + localSocket = CreateFile(reinterpret_cast<const wchar_t *>(d->fullServerName.utf16()), // pipe name permissions, 0, // no sharing NULL, // default security attributes @@ -177,13 +172,14 @@ void QLocalSocket::connectToServer(OpenMode openMode) } if (localSocket == INVALID_HANDLE_VALUE) { - d->setErrorString(QLatin1String("QLocalSocket::connectToServer")); + const DWORD winError = GetLastError(); + d->_q_winError(winError, QLatin1String("QLocalSocket::connectToServer")); d->fullServerName = QString(); return; } // we have a valid handle - if (setSocketDescriptor((qintptr)localSocket, ConnectedState, openMode)) + if (setSocketDescriptor(reinterpret_cast<qintptr>(localSocket), ConnectedState, openMode)) emit connected(); } @@ -371,7 +367,7 @@ void QLocalSocketPrivate::_q_canWrite() qintptr QLocalSocket::socketDescriptor() const { Q_D(const QLocalSocket); - return (qintptr)d->handle; + return reinterpret_cast<qintptr>(d->handle); } qint64 QLocalSocket::readBufferSize() const diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index b380b0f7d6..24c17124dc 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -1383,20 +1383,24 @@ qint64 QNativeSocketEnginePrivate::nativeRead(char *data, qint64 maxSize) // No data was available for reading r = -2; break; - case EBADF: - case EINVAL: - case EIO: - //error string is now set in read(), not here in nativeRead() - break; case ECONNRESET: #if defined(Q_OS_VXWORKS) case ESHUTDOWN: #endif r = 0; break; + case ETIMEDOUT: + socketError = QAbstractSocket::SocketTimeoutError; + break; default: + socketError = QAbstractSocket::NetworkError; break; } + + if (r == -1) { + hasSetSocketError = true; + socketErrorString = qt_error_string(); + } } #if defined (QNATIVESOCKETENGINE_DEBUG) diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 1b84b26d83..c999bd2088 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -294,7 +294,8 @@ static inline QAbstractSocket::SocketType qt_socket_getType(qintptr socketDescri { int value = 0; QT_SOCKLEN_T valueSize = sizeof(value); - if (::getsockopt(socketDescriptor, SOL_SOCKET, SO_TYPE, (char *) &value, &valueSize) != 0) { + if (::getsockopt(socketDescriptor, SOL_SOCKET, SO_TYPE, + reinterpret_cast<char *>(&value), &valueSize) != 0) { WS_ERROR_DEBUG(WSAGetLastError()); } else { if (value == SOCK_STREAM) @@ -361,7 +362,7 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc #ifdef HANDLE_FLAG_INHERIT if (socket != INVALID_SOCKET) { // make non inheritable the old way - BOOL handleFlags = SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0); + BOOL handleFlags = SetHandleInformation(reinterpret_cast<HANDLE>(socket), HANDLE_FLAG_INHERIT, 0); #ifdef QNATIVESOCKETENGINE_DEBUG qDebug() << "QNativeSocketEnginePrivate::createNewSocket - set inheritable" << handleFlags; #else @@ -1443,7 +1444,7 @@ qint64 QNativeSocketEnginePrivate::nativeWrite(const char *data, qint64 len) for (;;) { WSABUF buf; - buf.buf = (char*)data + ret; + buf.buf = const_cast<char*>(data) + ret; buf.len = bytesToSend; DWORD flags = 0; DWORD bytesWritten = 0; diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index a07ea65046..dd2bc90855 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1383,23 +1383,6 @@ bool QSocks5SocketEngine::bind(const QHostAddress &addr, quint16 port) d->localAddress = QHostAddress(); d->udpData->associatePort = d->localPort; d->localPort = 0; - QUdpSocket dummy; -#ifndef QT_NO_BEARERMANAGEMENT - dummy.setProperty("_q_networksession", property("_q_networksession")); -#endif - dummy.setProxy(QNetworkProxy::NoProxy); - if (!dummy.bind() - || writeDatagram(0,0, QIpPacketHeader(d->data->controlSocket->localAddress(), dummy.localPort())) != 0 - || !dummy.waitForReadyRead(qt_subtract_from_timeout(msecs, stopWatch.elapsed())) - || dummy.readDatagram(0,0, &d->localAddress, &d->localPort) != 0) { - QSOCKS5_DEBUG << "udp actual address and port lookup failed"; - setState(QAbstractSocket::UnconnectedState); - setError(dummy.error(), dummy.errorString()); - d->data->controlSocket->close(); - //### reset and error - return false; - } - QSOCKS5_DEBUG << "udp actual address and port" << d->localAddress << ':' << d->localPort; return true; #endif // QT_NO_UDPSOCKET } |