SSLを介してサードパーティのREST APIに多くの送信SSL接続を行わなければならないサービス(CentOSのC言語)を作成しています。OpenSSLはファイルハンドルを解放しません
OpenSSLは、リモートサーバーとの安全な接続の確立を作成するために使用されます。 ssl_connectionの初期化後、返されたファイルディスクリプタをepollキューに登録します。
私はAPIトランザクションに接続して実行することができます。その後、リモートサーバーは接続を終了し、fdでEPOLLRDHUPを取得し、クリーンアップルーチンを呼び出します。
signal(SIGPIPE,SIG_IGN);
if(PS(endpoint)->ssl != NULL)
{
if(SSL_shutdown(PS(endpoint)->ssl)==0)
{
SSL_shutdown(PS(endpoint)->ssl);
}
}
if(PS(endpoint)->web != NULL)
{
BIO_free(PS(endpoint)->web); // This can cause a SIGPIPE, especialy when debugging!
PS(endpoint)->web = NULL;
}
このシャットダウン手順で問題はないようですが、エラーはスローされません。
は、しかし - すべての後続の接続は、次のシステムFDを取り、eventualyすべてのファイル記述子が1028
のOSソフト制限に達し排出されるので問題はFDを閉じて戻ってカーネルに解放されないのですか?
これは、いずれかが正しいOpenSSLのセッションのシャットダウン手順を助けてください
ls /proc/$PID/fd/ | wc -l
を通じて確認されていますか?