[英]What should be called for re-negotiation in SSL_Read/SSL_Write
我正在嘗試將OpenSSL添加到epoll,並且套接字處於非阻止模式。 困惑我的一個問題是: SSL_read
可能產生SSL_ERROR_WANT_WRITE
和SSL_write
可能產生SSL_ERROR_WANT_READ
因為SSL重新協商。
因此,我的問題是:
如果SSL_read產生SSL_ERROR_WANT_WRITE
,我將套接字事件修改為EPOLLOUT
。 然后,當套接字以后可寫時,我應該調用SSL_read
或SSL_write
嗎? (API文檔說必須重復相同的操作)
與問題(1)相似,情況是SSL_write
產生SSL_ERROR_WANT_READ
。
如果SSL_read
產生SSL_ERROR_WANT_WRITE
,我可以調用SSL_send
下一步發送數據嗎? (TCP是全雙工的,但是似乎OpenSSL無法獨立讀取和寫入...)
與問題(3)相似,情況是SSL_write
產生SSL_ERROR_WANT_READ
。
非常感謝!
您應該重新啟動您嘗試的API。
因此,如果SSL_read
發出WANT_WRITE
,則在套接字准備好寫入時再次調用SSL_read
。 對於SSL_write
同樣。
OpenSSL文檔僅聲明您需要使用給出阻止通知時所提供的相同參數來重復調用。
警告
當由於SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE而必須重復SSL_read()操作時,必須使用相同的參數來重復該操作。
即使您要進行全雙工操作,如果當前操作在等待狀態之前被阻塞,則應將所有新操作排隊,直到阻塞操作完成。 這樣,您將避免使用與觸發阻止通知的操作不同的操作進入SSL堆棧的潛在問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.