是否有可能在不中断或关闭QSslSocket连接的情况下,创建新的TCP并使其获得现有TCP连接的所有权,并丢弃旧的QTcpSocket?
我需要这个来在我的FTP服务器中实现显式FTPS,这要求最初连接是未加密的,并且只有在FTP客户端的请求(命令AUTH SSL或AUTH TLS)时,才会启动SSL/TLS握手。
发布于 2013-01-10 21:31:57
是的,这是可能的。要做到这一点,最简单的方法是用QSslSocket替换QTcpSocket。在您调用startClientEncryption之前,QSslSocket的行为将与普通QTcpSocket (无加密)完全相同。在那之后,QSslSocket将像普通的QTcpSocket一样工作,但是所有的通信都在后台加密。
使用它,我实际上能够在不到一个小时的时间内移植一个SSL项目来使用100k+。
编辑
在未加密模式下使用QSslSocket没有(实际)开销,因为它只会调用相应的QTcpSocket方法。例如读取方法(qsslsocket.cpp Qt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuffhttps://stackoverflow.com/questions/14258022
复制相似问题