私はデータを読み書きするソケットアプリケーションを持っています。私はOpenSSLを使って暗号化/復号化を行っています。私の質問は、 "BIO_write"メソッドがデータを内部的にバッファリングできるかどうか、またはソケットから多くを読み込む際に成長するバッファに追加する必要があるかどうかです。ここに私がやっていることがあります。SSLに部分パケットを書き込むBIO
私はソケットから読んで、私はBIOに読み込まれたすべてのバイトを書き込むには、以下のクラスのメソッドを使用します。
int CSslConnectionContext::Store(BYTE* pbData, DWORD dwDataLength)
{
int bytes = 0;
if (dwDataLength > 0)
{
bytes = BIO_write(bio[BIO_RECV], pbData, dwDataLength);
}
return bytes;
}
私はその後すぐに復号化されたデータを取得するためにSSL_readメソッドを呼び出します。
int CSslConnectionContext::Read(BYTE* pbBuffer, DWORD dwBufferSize)
{
int bytes = SSL_read(ssl, pbBuffer, dwBufferSize);
return bytes;
}
SSL_readが正の数を返した場合、私のアプリケーションで利用可能な復号化データが得られました。
ソケットの読み取りが1回の読み取りで復号化に必要なすべてのデータを取得しないとどうなるかはわかりません。
データを復号化できるようにするために100バイトが必要で、最初の読み取りで80が得られる場合は、それらの80でBIO_write()を呼び出し、次の20を取得するために別のソケット読み取りを行い、BIO_write )の20バイトだけで?
- コールBIO_write()80バイトの:
それとも、私は80を読んだとき、私はこのような何かを行うので、私のコードを記述する必要があります。
- これが障害インジケータを返す場合、その80バイトを保持します。
- ソケットから次の20バイトを読み取り、バッファされた80バイトに追加します。
- 100バイト
[SSL_read()](https://www.openssl.org/docs/manmaster/man3/SSL_read.html)のmanページは、SSL_readが実行される前に、元のバイオにもっと多くのデータが必要な場合を処理しているようですすべてのデータを返します。この場合、SSL_read()は負の数を返し、SSL_get_error()はSSL_WANT_READまたはSSL_WANT_WRITEに対応する値を返します。 –