OpenSSL庫允許使用SSL_read從底層套接字讀取數據,並使用SSL_write寫入。這些函數可能會返回SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE,具體取決於它們的ssl協議需求(例如重新協商連接時)。如何在非阻塞套接字上處理OpenSSL SSL_ERROR_WANT_READ/WANT_WRITE
我真的不明白API要我怎樣處理這些結果。
將接受客戶端連接的服務器應用程序映像建立一個新的ssl會話,使底層套接字非阻塞,然後將filedescriptor添加到select/poll/epoll循環中。
如果客戶端發送數據,主循環會將其發送到ssl_read。如果返回SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE,那麼在這裏需要做些什麼? WANT_READ可能很容易,因爲下一個主循環迭代可能會導致另一個ssl_read。但是,如果ssl_read返回WANT_WRITE,應該調用哪些參數?爲什麼圖書館不會自己發出呼叫?
如果服務器想要向客戶端發送一些數據,它將使用ssl_write。同樣,如果返回WANT_READ或WANT_WRITE,該怎麼辦? WANT_WRITE可以通過重複剛被調用的同一個調用來回答嗎?如果返回WANT_READ,是否應該返回到主循環並讓select/poll/epoll處理這個問題?但是,首先應該寫的信息呢?
或者應該在寫入失敗後立即進行讀取?那麼,什麼防止從應用程序協議中讀取字節,然後在真正的解析器位於主循環中時不得不在應用程序的郊區某處處理呢?
清晰簡潔的解釋+1 – 2012-04-11 15:34:43
這裏最好的解釋 – 2014-06-03 05:14:46