當BIO是內存BIO而不是套接字BIO時,我對BIO例程BIO_read()/ BIO_write()和SSL_read()/ SSL_write()之間的區別感到困惑。當BIO是內存BIO而不是套接字BIO時,BIO_read/BIO_write和SSL_read/SSL_write有什麼區別?
我想編寫一個WebRTC服務器使用libnice爲ICE堆棧和openssl爲DTLS堆棧。 ICE棧具有到客戶端的套接字連接,所以我不能在openssl中使用基於套接字的BIO。相反,我正在使用內存BIO。
因此,我使用的高級過程是,當我從ICE套接字上的客戶端接收到DTLS消息時,我使用BIO_write()將該消息寫入DTLS堆棧。然後,當DTLS堆棧有消息發送給客戶端時,我使用BIO_read()獲取該消息並使用ICE套接字將其發送給客戶端。
我已經看到一些基本執行此過程的源代碼示例,但它們也在BIO_write()調用之後調用SSL_read()例程。這對我來說沒有意義。爲什麼在我基本上使用BIO_write()調用將客戶端消息寫入DTLS堆棧之後,調用SSL_read()是必需的?如果在BIO_write()之後我沒有調用SSL_read(),那麼我的代碼不起作用。但是當我在BIO_write()之後調用SSL_read()時,這實際上是與瀏覽器客戶端交換握手消息。
問題:使用內存BIO,BIO_read()和SSL_read()之間有什麼區別; 問題:使用內存BIO,BIO_write()和SSL_write()有什麼區別? 問題:默認內存是BIO阻塞還是非阻塞?我假設它是非阻塞的,因爲它是基於內存的BIO而不是基於套接字的BIO。
感謝, -Andres
這些是非常有幫助的鏈接,謝謝。 –