當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby Buffering.read_nonblock用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 Buffering.read_nonblock。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。