新しいQSslSocketを作成して、既存のTCP接続と古いQTcpSocketの所有権をTCP接続を中断または閉じることなく破棄することは可能ですか?Morph existing QTcpSocket to QSslSocket
私のFTPサーバーに明示的なFTPSを実装するには、最初に接続が暗号化されていないこと、FTPクライアントの要求(コマンドAUTH SSL
またはAUTH TLS
)、SSL/TLSハンドシェイクが開始されます。
新しいQSslSocketを作成して、既存のTCP接続と古いQTcpSocketの所有権をTCP接続を中断または閉じることなく破棄することは可能ですか?Morph existing QTcpSocket to QSslSocket
私のFTPサーバーに明示的なFTPSを実装するには、最初に接続が暗号化されていないこと、FTPクライアントの要求(コマンドAUTH SSL
またはAUTH TLS
)、SSL/TLSハンドシェイクが開始されます。
はいこれが可能です。これを行う最も簡単な方法は、QTcpSocket
をQSslSocket
に置き換えることです。 QSslSocket
は、startClientEncryption
に電話するまで、通常のQTcpSocket
(暗号化なし)のように動作します。その後、QSslSocket
は通常のQTcpSocket
のように動作しますが、すべての通信はバックグラウンドで暗号化されます。
これを使って、実際には1時間以内にSSLを使用するように100k + linesプロジェクトを移植することができました。
それだけで対応するQTcpSocket
メソッドを呼び出しますので、暗号化されていないモードでQSslSocket
を使用するには、no(本当の)オーバーヘッドはありません。例えば、読み取り方法(qsslsocket.cpp
Qt 4.8.3):
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
//encryption stuff