簡體   English   中英

SSL_Read / SSL_Write中的重新協商應該調用什么

[英]What should be called for re-negotiation in SSL_Read/SSL_Write

我正在嘗試將OpenSSL添加到epoll,並且套接字處於非阻止模式。 困惑我的一個問題是: SSL_read可能產生SSL_ERROR_WANT_WRITESSL_write可能產生SSL_ERROR_WANT_READ因為SSL重新協商。

因此,我的問題是:

  1. 如果SSL_read產生SSL_ERROR_WANT_WRITE ,我將套接字事件修改為EPOLLOUT 然后,當套接字以后可寫時,我應該調用SSL_readSSL_write嗎? (API文檔說必須重復相同的操作)

  2. 與問題(1)相似,情況是SSL_write產生SSL_ERROR_WANT_READ

  3. 如果SSL_read產生SSL_ERROR_WANT_WRITE ,我可以調用SSL_send下一步發送數據嗎? (TCP是全雙工的,但是似乎OpenSSL無法獨立讀取和寫入...)

  4. 與問題(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM