QSslServer Class
Implementa un servidor TCP cifrado y seguro sobre TLS. Más...
| Cabecera: | #include <QSslServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network)target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Desde: | Qt 6.4 |
| Hereda: | QTcpServer |
- Lista de todos los miembros, incluyendo los heredados
- QSslServer es parte de la API de programación de redes.
Funciones Públicas
| QSslServer(QObject *parent = nullptr) | |
| virtual | ~QSslServer() override |
| int | handshakeTimeout() const |
| void | setHandshakeTimeout(int timeout) |
| void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
| QSslConfiguration | sslConfiguration() const |
Señales
| void | alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError) |
| void | handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error) |
| void | peerVerifyError(QSslSocket *socket, const QSslError &error) |
| void | preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator) |
| void | sslErrors(QSslSocket *socket, const QList<QSslError> &errors) |
| void | startedEncryptionHandshake(QSslSocket *socket) |
Funciones Protegidas Reimplementadas
| virtual void | incomingConnection(qintptr socket) override |
Descripción detallada
Clase que se utiliza en lugar de QTcpServer para implementar el servidor TCP utilizando Transport Layer Security (TLS).
Para configurar los parámetros del protocolo de enlace seguro, utilice las funciones setter aplicables en un objeto QSslConfiguration y, a continuación, utilícelo como argumento de la función setSslConfiguration(). Todas las siguientes conexiones entrantes que se gestionen utilizarán esta configuración.
Para comenzar a escuchar las conexiones entrantes, utilice la función listen() heredada de QTcpServer. Se pueden configurar otros ajustes utilizando las funciones setter heredadas de la clase QTcpServer.
Conéctate a las señales de esta clase para responder a los intentos de conexión entrantes. Son iguales que las señales de QSslSocket, pero además pasa un puntero al socket en cuestión.
Cuando respondas a la señal pendingConnectionAvailable(), utiliza la función nextPendingConnection() para obtener la siguiente conexión entrante y sacarla de la cola de conexiones pendientes. El QSslSocket es un hijo del QSslServer y será borrado cuando el QSslServer sea borrado. Es una buena idea destruir el objeto explícitamente cuando hayas terminado con él, para evitar desperdiciar memoria.
Ver también QTcpServer, QSslConfiguration, y QSslSocket.
Documentación de Funciones Miembro
[explicit] QSslServer::QSslServer(QObject *parent = nullptr)
Construye un nuevo QSslServer con la dirección parent.
[override virtual noexcept] QSslServer::~QSslServer()
Destruye la página QSslServer.
Se cierran todas las conexiones abiertas.
[signal] void QSslServer::alertReceived(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer emite esta señal si socket ha recibido un mensaje de alerta de un par. level indica si la alerta era fatal o era una advertencia. type es el código que explica por qué se envió la alerta. Cuando se dispone de una descripción textual del mensaje de alerta, se proporciona en description.
Nota: La señal se utiliza principalmente con fines informativos y de depuración y no requiere ninguna manipulación en la aplicación. Si la alerta era fatal, el backend subyacente la gestionará y cerrará la conexión.
Nota: No todos los backends soportan esta funcionalidad.
Véase también alertSent(), QSsl::AlertLevel, y QSsl::AlertType.
[signal] void QSslServer::alertSent(QSslSocket *socket, QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QSslServer emite esta señal si se ha enviado un mensaje de alerta desde socket a un par. level describe si se trata de una advertencia o de un error fatal. type proporciona el código del mensaje de alerta. Cuando se dispone de una descripción textual del mensaje de alerta, se proporciona en description.
Nota: Esta señal es principalmente informativa y puede utilizarse con fines de depuración, normalmente no requiere ninguna acción por parte de la aplicación.
Nota: No todos los backends soportan esta funcionalidad.
Véase también alertReceived(), QSsl::AlertLevel, y QSsl::AlertType.
[signal] void QSslServer::errorOccurred(QSslSocket *socket, QAbstractSocket::SocketError socketError)
Esta señal se emite tras producirse un error durante el handshake. El parámetro socketError describe el tipo de error que se ha producido.
El socket se elimina automáticamente después de que se emita esta señal si el handshake del socket no ha alcanzado el estado cifrado. Pero si el socket se encripta con éxito, se inserta en la cola de conexiones pendientes del QSslServer. Cuando el usuario ha llamado a QTcpServer::nextPendingConnection() es responsabilidad del usuario destruir el socket o el socket no será destruido hasta que el objeto QSslServer sea destruido. Si se produce un error en un socket después de que se haya insertado en la cola de conexiones pendientes, esta señal no se emitirá, y el socket no se eliminará ni se destruirá.
Nota: No se puede utilizar Qt::QueuedConnection al conectarse a esta señal, o el socket ya habrá sido destruido cuando se gestione la señal.
Véase también QSslSocket::error() y errorString().
[signal] void QSslServer::handshakeInterruptedOnError(QSslSocket *socket, const QSslError &error)
QSslServer emite esta señal si socket ha encontrado un error de verificación de certificado y si se ha activado la notificación anticipada de errores en QSslConfiguration. Se espera que una aplicación inspeccione error y decida si quiere continuar con el handshake, o abortarlo y enviar un mensaje de alerta al peer. La conexión señal-ranura debe ser directa.
Véase también QSslSocket::continueInterruptedHandshake(), sslErrors(), y QSslConfiguration::setHandshakeMustInterruptOnError().
int QSslServer::handshakeTimeout() const
Devuelve el tiempo de espera del handshake actualmente configurado.
Véase también setHandshakeTimeout().
[override virtual protected] void QSslServer::incomingConnection(qintptr socket)
Reimplementa: QTcpServer::incomingConnection(qintptr socketDescriptor).
Llamada cuando se establece una nueva conexión.
Convierte socket a QSslSocket.
[signal] void QSslServer::peerVerifyError(QSslSocket *socket, const QSslError &error)
QSslServer puede emitir esta señal varias veces durante el handshake SSL, antes de que se haya establecido el cifrado, para indicar que se ha producido un error al establecer la identidad del peer. La error suele ser una indicación de que socket es incapaz de identificar de forma segura al peer.
Esta señal te proporciona una indicación temprana de que algo va mal. Al conectarte a esta señal, puedes elegir manualmente cortar la conexión desde dentro de la ranura conectada antes de que el apretón de manos haya finalizado. Si no se realiza ninguna acción, QSslServer procederá a emitir sslErrors().
Véase también sslErrors().
[signal] void QSslServer::preSharedKeyAuthenticationRequired(QSslSocket *socket, QSslPreSharedKeyAuthenticator *authenticator)
QSslServer emite esta señal cuando socket negocia un ciphersuite PSK, y por lo tanto la autenticación PSK es entonces requerida.
Cuando se utiliza PSK, el servidor debe proporcionar una identidad válida y una clave precompartida válida para que el protocolo SSL pueda continuar. Las aplicaciones pueden proporcionar esta información en una ranura conectada a esta señal, rellenando el objeto authenticator pasado según sus necesidades.
Nota: Ignorar esta señal, o no proporcionar las credenciales requeridas, causará que el handshake falle, y por lo tanto que la conexión sea abortada.
Nota: El objeto authenticator es propiedad de socket y no debe ser eliminado por la aplicación.
Véase también QSslPreSharedKeyAuthenticator.
void QSslServer::setHandshakeTimeout(int timeout)
Establece el timeout a utilizar para todos los handshakes entrantes, en milisegundos.
Esto es relevante en el escenario en el que un cliente, ya sea malicioso o accidental, se conecta al servidor pero no hace ningún intento de comunicación o de iniciar un handshake. QSslServer entonces finalizará automáticamente la conexión después de que hayan transcurrido timeout milisegundos.
Por defecto, el tiempo de espera es de 5000 milisegundos (5 segundos).
Nota: El marco TLS subyacente puede tener su propia lógica de tiempo de espera ahora o en el futuro, esta función no afecta a eso.
Nota: El timeout pasado a esta función sólo se aplicará a las nuevas conexiones. Si un cliente ya está conectado, utilizará el tiempo de espera que se estableció cuando se conectó.
Véase también handshakeTimeout().
void QSslServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
Establece el sslConfiguration a utilizar para todas las siguientes conexiones entrantes.
Esto debe ser llamado antes de listen() para asegurar que la configuración deseada estuvo en uso durante todos los handshakes.
Véase también sslConfiguration() y QSslSocket::setSslConfiguration().
QSslConfiguration QSslServer::sslConfiguration() const
Devuelve la configuración ssl actual.
Véase también setSslConfiguration().
[signal] void QSslServer::sslErrors(QSslSocket *socket, const QList<QSslError> &errors)
QSslServer emite esta señal después del handshake SSL para indicar que se han producido uno o más errores al establecer la identidad del peer. Los errores son normalmente una indicación de que socket es incapaz de identificar de forma segura al peer. A menos que se realice alguna acción, la conexión se interrumpirá tras la emisión de esta señal.
Si desea continuar la conexión a pesar de los errores que se han producido, debe llamar a QSslSocket::ignoreSslErrors() desde dentro de una ranura conectada a esta señal. Si necesitas acceder a la lista de errores en un momento posterior, puedes llamar a sslHandshakeErrors().
errors contiene uno o más errores que impiden a QSslSocket verificar la identidad del peer.
Nota: No puede utilizar Qt::QueuedConnection cuando se conecte a esta señal, o llamar a QSslSocket::ignoreSslErrors() no tendrá ningún efecto.
Véase también peerVerifyError().
[signal] void QSslServer::startedEncryptionHandshake(QSslSocket *socket)
Esta señal se emite cuando el cliente, conectado a socket, inicia el handshake TLS.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.