本文簡要介紹ruby語言中 OpenSSL::Buffering.read_nonblock
的用法。
用法
read_nonblock(maxlen, buf=nil, exception: true)
以非阻塞方式最多讀取maxlen
個字節。
當沒有數據可以讀取而不阻塞時,它會引發 OpenSSL::SSL::SSLError
擴展 IO::WaitReadable
或 IO::WaitWritable
。
IO::WaitReadable
表示 SSL
需要在內部讀取,因此當底層 IO
可讀時,應再次調用 read_nonblock
。
IO::WaitWritable
表示 SSL
需要在內部寫入,因此在底層 IO
可寫後應再次調用 read_nonblock
。
OpenSSL::Buffering#read_nonblock
需要兩個救援子句,如下所示:
# emulates blocking read (readpartial).
begin
result = ssl.read_nonblock(maxlen)
rescue IO::WaitReadable
IO.select([io])
retry
rescue IO::WaitWritable
IO.select(nil, [io])
retry
end
請注意, read_nonblock
寫入底層 IO
的一個原因是當對等方請求新的 TLS/SSL 握手時。有關詳細信息,請參閱 openssl 常見問題解答。 www.openssl.org/support/faq.html
通過將關鍵字參數 exception
指定為 false
,您可以指示 read_nonblock
不應引發 IO::Wait*able 異常,而是返回符號 :wait_writable
或 :wait_readable
。在 EOF 處,它將返回 nil
而不是引發 EOFError
。
相關用法
- Ruby Buffering.write_nonblock用法及代碼示例
- Ruby Buffer.slice用法及代碼示例
- Ruby Buffer.set_value用法及代碼示例
- Ruby Buffer.external?用法及代碼示例
- Ruby Buffer.free用法及代碼示例
- Ruby Buffer.new用法及代碼示例
- Ruby Buffer.for用法及代碼示例
- Ruby Buffer.locked?用法及代碼示例
- Ruby Buffer類用法及代碼示例
- Ruby Buffer.transfer用法及代碼示例
- Ruby Buffer.map用法及代碼示例
- Ruby Buffer.clear用法及代碼示例
- Ruby Buffer.copy用法及代碼示例
- Ruby Buffer.locked用法及代碼示例
- Ruby Buffer.get_value用法及代碼示例
- Ruby Buffer.get_string用法及代碼示例
- Ruby Buffer.to_s用法及代碼示例
- Ruby Buffer.resize用法及代碼示例
- Ruby Bundler.setup用法及代碼示例
- Ruby Bundler模塊用法及代碼示例
- Ruby Bundler.require用法及代碼示例
- Ruby Bundler.definition用法及代碼示例
- Ruby BigMath.cos用法及代碼示例
- Ruby Binding.local_variable_defined?用法及代碼示例
- Ruby BigDecimal.self >用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Buffering.read_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。