是否有可能创建一个新的QSslSocket,并为它采取所有权在现有的TCP连接,和旧的QTcpSocket被丢弃,而不中断或关闭TCP连接?
我需要在我的FTP服务器上实现显式FTPS,这要求初始连接是未加密的,并且只有在FTP客户端请求(命令AUTH SSL
或AUTH TLS
)时,如果它来了,就会启动SSL/TLS握手
这是可能的。最简单的方法是用QSslSocket
代替QTcpSocket
。在调用startClientEncryption
之前,QSslSocket
的行为与正常的QTcpSocket
完全相同(没有加密)。之后,QSslSocket
将像正常的QTcpSocket
一样工作,但所有通信都在后台加密。
使用它,我实际上能够在不到一个小时的时间内将一个100k+行项目移植到使用SSL。
<标题>编辑在未加密模式下使用QSslSocket
没有(实际)开销,因为它只会调用相应的QTcpSocket
方法。例如read方法(qsslsocket.cpp
Qt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff
标题>