私は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について心配する必要があるのか、またはその逆であるのか疑問に思います。
ありがとうございました