我有一個緩衝SSL連接的BIO對象。我如何輪詢連接以查看是否可以不阻塞地調用讀取?如何輪詢SSL BIO對象?
OpenSSL的網站上說:有時與阻止套接字使用
的一種技術是使用一個系統調用(比如select(),輪詢()或等同物),以確定在數據可用時,然後調用讀取()來讀取數據。不應使用與BIO等價的(即在基礎I/O結構上調用select(),然後調用BIO_read()來讀取數據),因爲對BIO_read()的單個調用可能導致多次讀取(並寫入底層I/O結構上的SSL BIO),並可能因此而阻塞。相反,select()(或等效)應該與非阻塞I/O結合使用,以便連續讀取請求重試而不是阻塞。
這裏的問題是,因爲它是在其他地方做我不能改變的連接類型。有另一種方法來實現我的目標嗎?
即時通訊在Windows上,關於不指定。但是,我嘗試了'fcntl'的windows變體:'ioctlsocket'和'OpenSSL'只是崩潰。 – chacham15