OpenSSL API を使用して 1 つの SSL サーバーと対話する 1 つの SSL クライアントを作成しました。OpenSSL サイトで、データを書き込んだ後に書き込みバッファをフラッシュする必要があることを知りました。クライアント プログラムで SSL_Write と SSL_Read を使用しています。OpenSSL サイトが示唆したように、BIO_flush(BIO*) を使用してデータをフラッシュしようとしたところ、ここでクラッシュしました。
このサイトから取得した SSL ライブラリを使用しています
ここで、BIO_flush が読み取りバッファーをフラッシュするのか、書き込みバッファーをフラッシュするのかについては明確ではありません..:-(だから、SSL 書き込みバッファーをフラッシュする他の方法があることを知りたかっただけです...?
これが私のクライアントプログラムの詳細です。
- SSL_new を使用して SSL オブジェクト (mSsl) を作成する
- TCPソケットの作成とサーバーとの接続
- BIO_new_socket(socket_id,BIO_NOCLOSE)を使用してBIOオブジェクト(mBio)を作成する
- SSL_set_bio(mSsl,mBio,mBio); を使用して BIO オブジェクトを SSL オブジェクトに設定します。
- SSL_set_fd(mSsl,socket_id); を使用してソケットを SSL オブジェクトに設定します。
- SSL_Connect(mSsl) を使用してサーバーとの SSL 接続を確立します。
上記の手順の後、書き込み用と読み取り用に 2 つの別々のスレッドを開始しています。書き込みスレッドは SSL_write を使用してデータをサーバーに書き込み、読み取りスレッドは SSL_Read を使用してサーバーからデータを読み取ります。
SSL_Write を使用して各パケットを書き込んだ後の書き込みスレッドでは、BIO_flush(mBio) を呼び出しています。
プログラム全体で、バイオバッファフラッシュを行うために、この場所でのみ mBio オブジェクトを直接使用しています。
いくつかのパケットの送信を開始すると、BIO_flush でクラッシュするようにプログラムします... それ以上のものは得られません。
上記のリンクを提供し、同じ問題に直面しているライブラリを使用した人はいますか? はいの場合、解決策を知っているかどうか教えてください。
BIO_flush() を使用するスレッド同期規則はありますか? つまり、BIO_flush SSL_Read の呼び出しが同時に発生してはならないということです... ?