我有一個多線程應用程序,它在C中大量使用OpenSSL。它的設計思想是所有的SSL連接都會阻塞。具體來說,阻止BIO。他們都被分配掉了一個進入端口是這樣的:將OpenSSL BIO從阻塞模式更改爲非阻塞模式
ssl = SSL_new(ctx);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
sock = BIO_new_socket(socket, BIO_CLOSE);
SSL_set_bio(ssl, sock, sock);
事實證明,雖然,也有代碼庫的地方使用非阻塞的BIOS會是最好的選擇了幾個小零件。受益於非阻塞BIO的小部件無法知道哪些SSL連接屬於它們。因此,他們總是接收阻塞的BIO。
問題是,阻塞BIO可以更改爲非阻塞?
我知道BIO_set_nbio可以被用來製造生物無阻塞但文件說:
建立連接之前BIO_set_nbio()的調用應該進行,因爲非阻塞I/O是在連接過程中設置。
我想過的另一種可能的選擇是複製BIO並重新創建它,同時以某種方式保持所有狀態。
我不明白你所遇到的問題。在建立連接時建立非阻塞IO是合理的,當然你可以用一種處理方式來抽象你的代碼。 –
問題在於建立連接時使IO無阻塞是一個大變化。 – inthemedium