/*! Connects to the IP address and port specified by \a address and \a port. If the connection is established, this function returns true and the socket enters ConnectedState. Otherwise, false is returned. If false is returned, state() should be called to see if the socket is in ConnectingState. If so, a delayed TCP connection is taking place, and connectToHost() must be called again later to determine if the connection was established successfully or not. The second connection attempt must be made when the socket is ready for writing. This state can be determined either by connecting a QSocketNotifier to the socket descriptor returned by socketDescriptor(), or by calling the blocking function waitForWrite(). Example: \snippet doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp 0 Otherwise, error() should be called to determine the cause of the error. */ bool QNativeSocketEngine::connectToHost(const QHostAddress &address, quint16 port) { Q_D(QNativeSocketEngine); Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::connectToHost(), false); #if defined (QT_NO_IPV6) if (address.protocol() == QAbstractSocket::IPv6Protocol) { d->setError(QAbstractSocket::UnsupportedSocketOperationError, QNativeSocketEnginePrivate::NoIpV6ErrorString); return false; } #endif if (!d->checkProxy(address)) return false; Q_CHECK_STATES(QNativeSocketEngine::connectToHost(), QAbstractSocket::UnconnectedState, QAbstractSocket::ConnectingState, false); d->peerAddress = address; d->peerPort = port; bool connected = d->nativeConnect(address, port); if (connected) d->fetchConnectionParameters(); return connected; }
/*! Reads up to \a maxSize bytes into \a data from the socket. Returns the number of bytes read, or -1 if an error occurred. */ qint64 QNativeSocketEngine::read(char *data, qint64 maxSize) { Q_D(QNativeSocketEngine); Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::read(), -1); Q_CHECK_STATES(QNativeSocketEngine::read(), QAbstractSocket::ConnectedState, QAbstractSocket::BoundState, -1); qint64 readBytes = d->nativeRead(data, maxSize); // Handle remote close if (readBytes == 0 && d->socketType == QAbstractSocket::TcpSocket) { d->setError(QAbstractSocket::RemoteHostClosedError, QNativeSocketEnginePrivate::RemoteHostClosedErrorString); close(); return -1; } else if (readBytes == -1) { if (!d->hasSetSocketError) { d->hasSetSocketError = true; d->socketError = QAbstractSocket::NetworkError; d->socketErrorString = qt_error_string(); } close(); return -1; } return readBytes; }
/*! Connects to the IP address and port specified by \a address and \a port. If the connection is established, this function returns true and the socket enters ConnectedState. Otherwise, false is returned. If false is returned, state() should be called to see if the socket is in ConnectingState. If so, a delayed TCP connection is taking place, and connectToHost() must be called again later to determine if the connection was established successfully or not. The second connection attempt must be made when the socket is ready for writing. This state can be determined either by connecting a QSocketNotifier to the socket descriptor returned by socketDescriptor(), or by calling the blocking function waitForWrite(). Example: \snippet doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp 0 Otherwise, error() should be called to determine the cause of the error. */ bool QNativeSocketEngine::connectToHost(const QHostAddress &address, quint16 port) { Q_D(QNativeSocketEngine); Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::connectToHost(), false); if (!d->checkProxy(address)) return false; Q_CHECK_STATES(QNativeSocketEngine::connectToHost(), QAbstractSocket::UnconnectedState, QAbstractSocket::ConnectingState, false); d->peerAddress = address; d->peerPort = port; bool connected = d->nativeConnect(address, port); if (connected) d->fetchConnectionParameters(); return connected; }