簡體   English   中英

對OpenSSL非阻塞I / O感到困惑

[英]Confused about OpenSSL non-blocking I/O

通常,OpenSSL庫(C API)似乎提供了兩種方法來執行所有操作:您可以使用根據自己的喜好配置的普通系統套接字,也可以使用類似於流的OpenSSL BIO對象。

但是,我經常對一些重復的功能感到困惑。 例如,如何使SSL連接無阻塞? 一種方法似乎是簡單地訪問底層文件描述符並使用fcntl將其設置為非阻塞。 但是還有一個名為BIO_set_nbio的OpenSSL API BIO_set_nbio ,它接收一個BIO*對象並將其設置為非阻塞模式。

那么設置非阻塞SSL套接字的最佳方法是什么? 如果您將OpenSSL傳遞給通過fnctl設置為非阻塞模式的本機文件描述符會發生什么? 你還需要專門調用BIO_set_nbio來使BIO對象無阻塞嗎?

我認為大多數人更喜歡BIO接口,但BIO例程只使用平台上可用的任何本機非阻塞套接字API。 我不知道如果混合搭配會發生什么。

請注意,SSL的非阻塞I / O通常比TCP 復雜。 如果你不理解這種情況你將會折磨自己。 有關John ViegaEric Rescorla的另外一本書,你可以閱讀OpenSSL郵件列表,以了解這引起的胃灼熱。 一些很好的代碼示例顯示了使用OpenSSL的非阻塞SSL編程,包含在TOR項目的軟件和curl實用程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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