2011-04-08 66 views
3

私はOpenSlプログラミングtutorialを読んでいます。SSL_read()はSSL_ERROR_WANT_WRITEを処理する必要がありますか?

1つの接続でサーバアプリケーションをブロックすることはできません。
したがって、ブロックしないソケットを使用します。それはそうので

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

チュートリアルの文書では、SSL再読込がいつでも実行できるため、SSL_read_WANT_WRITE(もちろんSSL_ERROR_WANT_READ)をSSL_readで処理する必要があると言います。
同じ理由でSSL_writeにSSL_ERROR_WANT_READがあります。ドキュメントから

我々は再ハンドシェイクする をしようとしていると我々はその再ハンドシェイク中に 書き込みをブロックば我々はWANT_WRITEを取得します。

我々は 書き込み可能であってもよいが、それは

あるとき、私は「再」ハンドシェイクの一部に混乱している読み を再開するためのソケットで待機する必要があります。
私はSSLの状態を保存して再利用する予定はありません(これはセッションの再開と呼ばれます) 最初のハンドシェイクの後、同じ接続のハンドシェイクを処理する必要はありません。

私はSSL_readのWANT_WRITEについて心配する必要があるのか​​、その逆でもセッションの再開を使用しないと思うのだろうかと思います。

答えて

5

Rehandshakingは、接続中の任意の時点でいずれかの側によってトリガすることができ、ありがとうございました。それは本当にセッションの再開とは直接関係がありません。

あなたのアプリケーションを信頼できるものにしたい場合は、現在読んでいるか書いているかにかかわらず、SSL_WANT_WRITESSL_WANT_READの両方を処理する準備ができている必要があります。

関連する問題