1

SSL 通信と非 SSL 通信を切り替える機能をユーザーに提供する必要があります。これを行うために、SSL コードは特定のコマンド パケットを探し、SSL スタッフをシャットダウンして、通常の TCP/IP 通信を開始します。これはうまくいきます。ただし、SSL モードで実行するためにすべてを再起動しようとすると、SSL_accept から -2 エラーが発生します。クリーンアップしていないものがあるはずですが、クリーンアップの提案を何度も検索しても見つかりませんでした。以下に示すように、それらすべてを投入しました。

    SSL_shutdown(ssl);
    SSL_CTX_free(ctx);
BIO_free(acc);
CONF_modules_unload(1);
OBJ_cleanup();
EVP_cleanup();
ENGINE_cleanup();
CRYPTO_cleanup_all_ex_data();
ERR_remove_state(0);
ERR_free_strings(); 

その後、後片付けが残っているなんて信じられません!

4

1 に答える 1

0

エラーをどのように受け取っているかを正確に知るために、さらにコードを投稿する必要があります。失敗した SSL_accept を作成SSL_get_errorした場合、正確には何を受け取りますか?

これらの推奨事項とは別に、接続を閉じる可能性がBIO_freeある基礎となるものによっては、あなたが .BIO_METHOD

BIO_free() を呼び出すと、基礎となる I/O 構造にも何らかの影響が及ぶ場合があります。たとえば、特定の状況で参照されているファイルが閉じられる場合があります。詳細については、個々の BIO_METHOD の説明を参照してください。

BIO_free manより。

接続を再利用したい場合は、BIO_pop ここをチェックしてください。

于 2013-03-05T10:20:44.180 に答える