0
我正在編寫一個服務(用於CentOS的C語言),它必須通過SSL與第三方REST API進行大量出站SSL連接。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
操作系統軟限制,所以這個問題的FD沒有被關閉並釋放回內核?
這是通過
ls /proc/$PID/fd/ | wc -l
證實任何一個可以請以正確的OpenSSL會議關機程序幫助?