2011-04-08 90 views
3

我正在閱讀openssl編程tutorialSSL_read()是否需要處理SSL_ERROR_WANT_WRITE?

我不能讓一個服務器應用程序在任何一個連接的操作上被阻塞,因此我將使用非阻塞套接字。

因爲它似乎,SSL握手發生在ssl_accept和所以SSL_connect,
這可能被阻止,我將有ssl_accept調用之前設置插座非塊。

教程doc說我需要在SSL_read上處理SSL_ERROR_WANT_WRITE(當然加上SSL_ERROR_WANT_READ),因爲SSL重新註冊可能隨時發生。
和SSL_write上的SSL_ERROR_WANT_READ出於同樣的原因。

從DOC,

我們得到一個WANT_WRITE如果我們試圖 到重新握手,我們阻止對重新握手期間 寫。

我們需要等待的插座上是 可寫,但重新開始讀 當它是

我在「再」握手的一部分困惑。
我不打算保存ssl狀態並重用它(這稱爲會話恢復?) 第一次握手後,我將不必處理同一連接的握手。

我不知道我是否仍然需要擔心SSL_read上的WANT_WRITE,反之亦然,我不會使用會話恢復。

謝謝

回答

5

重新握手可以通過兩側的連接過程中的任何點被觸發。它實際上與會話恢復沒有直接關係。

所以是的,如果你想要你的應用程序可靠,你應該準備好處理SSL_WANT_WRITESSL_WANT_READ無論你是否正在閱讀或寫作。

相關問題