int MSocketDevice::createNewSocket() { #if !defined(QT_NO_IPV6) int s = qt_socket_socket( protocol() == IPv6 ? AF_INET6 : AF_INET, t == Datagram ? SOCK_DGRAM : SOCK_STREAM, 0 ); #else int s = qt_socket_socket( AF_INET, t==Datagram?SOCK_DGRAM:SOCK_STREAM, 0 ); #endif if ( s < 0 ) { switch( errno ) { case EPROTONOSUPPORT: e = InternalError; // 0 is supposed to work for both types break; case ENFILE: e = NoFiles; // special case for this break; case EACCES: e = Inaccessible; break; case ENOBUFS: case ENOMEM: e = NoResources; break; case EINVAL: e = Impossible; break; default: e = UnknownError; break; } } else { return s; } return -1; }
/*! \internal Creates and returns a new socket descriptor of type \a socketType and \a socketProtocol. Returns -1 on failure. */ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType socketType, QAbstractSocket::NetworkLayerProtocol socketProtocol) { #ifndef QT_NO_IPV6 int protocol = (socketProtocol == QAbstractSocket::IPv6Protocol) ? AF_INET6 : AF_INET; #else Q_UNUSED(socketProtocol); int protocol = AF_INET; #endif int type = (socketType == QAbstractSocket::UdpSocket) ? SOCK_DGRAM : SOCK_STREAM; int socket = qt_socket_socket(protocol, type, 0); if (socket <= 0) { switch (errno) { case EPROTONOSUPPORT: case EAFNOSUPPORT: case EINVAL: setError(QAbstractSocket::UnsupportedSocketOperationError, ProtocolUnsupportedErrorString); break; case ENFILE: case EMFILE: case ENOBUFS: case ENOMEM: setError(QAbstractSocket::SocketResourceError, ResourceErrorString); break; case EACCES: setError(QAbstractSocket::SocketAccessError, AccessErrorString); break; default: break; } return false; } // Ensure that the socket is closed on exec*(). ::fcntl(socket, F_SETFD, FD_CLOEXEC); socketDescriptor = socket; return true; }