2014-01-17 114 views
1

對於SSL連接,可以通過接受呼叫接收的FD做什麼?它可以重複使用嗎?SSL Socket free and shutdown

我想知道究竟想知道的是這樣的:

一旦我接受的連接,我得到的FD。 我使用SSL_new創建一個SSL句柄(SSL*)。 使用SSL_set_fdFD添加到此句柄。 我使用SSL_accept來做握手。 現在,如果我在SSL*上撥打SSL_shutdownFD會關閉嗎? SSL_free呢?

如果上述問題的答案是否定的,那麼我可以使用FD與另一個SSL*

要解釋,我想究竟是什麼,如果我們讀取使用手柄SSL*從連接FD一些數據,那麼我們免費或關機SSL*,可我們看到使用新SSL*FD剩餘的數據?

回答

4

SSL_shutdown只通過套接字發送一個關閉通知。如果你想重新使用套接字作爲普通套接字,你必須確保對方也做了SSL_shutdown。此信息爲您提供了SSL_shutdown的返回碼:如果它爲1,則SSL連接已關閉,如果爲0,則應再次調用SSL_shutdown,以便等待來自對等方的關閉通知。請參閱SSL_shutdown文檔以獲取更多信息。

完成此操作後,您可以繼續將套接字用作普通套接字。這是通過FTP(ftps)進行的SSL,例如使用「AUTH TLS」將連接升級到SSL,並使用「CCC」將其再次降級爲純文本。

SSL_free只釋放與SSL對象關聯的內存,它不會更改套接字上的任何內容,也不會發送/接收任何數據。

+0

請閱讀我的最新編輯。對於這種用法,SSL_free是最適合的,還是應該嘗試關機? –

+0

就像我說過的:SSL_free只釋放內存(實際上,它減少了SSL對象上的引用計數器,並在計數器變爲0時釋放內存)並且不對套接字本身執行任何操作。如果您想讀取套接字上的其餘數據,例如將套接字從SSL降級爲普通套接字,您必須使用SSL_shutdown向對等方發送關閉通知,以便關閉SSL會話。 –

+0

我想要做的是將套接字傳遞給其他類,並從相同的連接讀取其餘的ssl數據。 –