4

私はopensslプログラミングチュートリアルを読んでいます。

単一の接続の操作でサーバーアプリをブロックさせることはできないため、
非ブロックソケットを使用します。

sslハンドシェイクはssl_acceptとssl_connectで行われているようですが、
これはブロックされる可能性があるため、ssl_accept呼び出しの前にソケットを非ブロックに設定する必要があります。

チュートリアルドキュメントには、SSLの再ハンドシェイクがいつでも発生する可能性があるため、SSL_readでSSL_ERROR_WANT_WRITE(およびもちろんSSL_ERROR_WANT_READ)を処理する必要があると書かれています。
そして、同じ理由でSSL_writeのSSL_ERROR_WANT_READ。

ドキュメントから、

再ハンドシェイクを試みている場合はWANT_WRITEを取得し、その再ハンドシェイク中に書き込みをブロックします。

ソケットが書き込み可能になるのを待つ必要がありますが、書き込み可能になったら読み取りを再開します

私は「再」ハンドシェイクの部分で混乱しています。
ssl状態を保存して再利用する予定はありません(これはセッション再開と呼ばれますか?)最初のハンドシェイクの後、同じ接続のハンドシェイクを処理する必要はありません。

セッション再開を使用しない場合でも、SSL_readでのWANT_WRITEについて心配する必要があるのか​​、またはその逆であるのか疑問に思います。

ありがとうございました

4

1 に答える 1

6

再ハンドシェイクは、接続中の任意の時点でどちらの側からでもトリガーできます。実際には、セッションの再開とは直接関係ありません。

そうです、アプリケーションの信頼性を高めたい場合は、現在読み取り中か書き込み中かに関係なく、両方SSL_WANT_WRITEを処理できるように準備する必要があります。SSL_WANT_READ

于 2011-04-10T12:38:40.113 に答える