2012-06-13 69 views
1

我需要讓用戶能夠在SSL和非SSL通信之間切換。爲此,SSL代碼將查找特定的命令包,關閉SSL內容並啓動正常的TCP/IP通信。這工作正常。但是,當我嘗試重新啓動所有以SSL模式運行時,SSL_accept發生-2錯誤。一定有什麼東西我沒有清理,但我還沒有找到它下面顯示了很多搜索的清理建議,我全部作爲已經拋出後:openssl SSL_accept error

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(); 

很難相信任何東西留在那之後清理!

回答

0

你應該發佈更多的代碼,以確切知道你是如何收到錯誤。如果您使SSL_accept的SSL_get_error失敗,您會收到什麼?

Appart酒店的這些建議,我可以看到你在做一個BIO_free,有時根本BIO_METHOD它可以關閉連接的deppending,我假設你正在重用它的下一個SSL_accept,至極可能是問題:

調用BIO_free()也可能對底層I/O結構有一些影響,例如它可能會關閉在某些情況下引用的文件。有關更多詳細信息,請參閱各個BIO_METHOD說明。

來自BIO_free man

如果你想重新使用連接,你應該檢查BIO_pophere