PosixSslServerSocket::PosixSslServerSocket( const unsigned int port,
                                            SSL_CTX * sslContext ) :
    ServerSocket(port) {
    initialize();
    setFileDescriptor(-1);
    setSslContext(sslContext);
}
void PosixSslServerSocket::stopListening( void ) {
    if( isBound() ) {
        close(mFileDescriptor);
        setFileDescriptor(-1);
        SSL_CTX_free(mSslContext);
        mSslContext = nullptr;
    }
}
PosixSslServerSocket::PosixSslServerSocket( const unsigned int port,
                                            const std::string & certificatFile,
                                            const std::string & keyFile ) :
    ServerSocket(port) {
    initialize();
    setFileDescriptor(-1);
    loadCertificates(certificatFile,keyFile);
}
bool PosixSslServerSocket::bindToPort( void ) {
    struct addrinfo hints;
    struct addrinfo * serverInfo;
    std::string portString;
    bool bound;
    int fd;

    if( isBound() ) {
        bound = true;
    } else {
        bound = false;
        memset(&hints,0,sizeof hints);
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_flags = AI_PASSIVE;
        portString = std::to_string(getPort());
        if( getaddrinfo(nullptr,portString.c_str(),&hints,&serverInfo) == 0 ) {
            fd = socket(serverInfo->ai_family,serverInfo->ai_socktype,
                        serverInfo->ai_protocol);
            if( fd >= 0 ) {
                int yes = 1;

                setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof yes);
                if( bind(fd,serverInfo->ai_addr,serverInfo->ai_addrlen) == 0 &&
                    listen(fd,256) == 0 ) {
                    bound = true;
                    FD_ZERO(&mRfds);
                    FD_SET(fd,&mRfds);
                    setFileDescriptor(fd);
                }
            }
            freeaddrinfo(serverInfo);
        }
    }

    return ( bound );
}
コード例 #5
0
/*!
    Constructs a QDBusUnixFileDescriptor object by copying the \a
    fileDescriptor parameter. The original file descriptor is not touched and
    must be closed by the user.

    Note that the value returned by fileDescriptor() will be different from
    the \a fileDescriptor parameter passed.

    If the \a fileDescriptor parameter is not valid, isValid() will return
    false and fileDescriptor() will return -1.

    \sa setFileDescriptor(), fileDescriptor()
*/
QDBusUnixFileDescriptor::QDBusUnixFileDescriptor(int fileDescriptor)
    : d(0)
{
    if (fileDescriptor != -1)
        setFileDescriptor(fileDescriptor);
}
void PosixTcpServerSocket::stopListening( void ) {
    if( isBound() ) {
        close(mFileDescriptor);
        setFileDescriptor(-1);
    }
}
PosixTcpServerSocket::PosixTcpServerSocket( const unsigned int port ) :
    ServerSocket(port) {
    setFileDescriptor(-1);
}