当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Buffering.write_nonblock用法及代码示例


本文简要介绍ruby语言中 OpenSSL::Buffering.write_nonblock 的用法。

用法

write_nonblock(s, exception: true)

以非阻塞方式写入s

如果有缓冲数据,则首先刷新。这可能会阻塞。

write_nonblock 返回写入 SSL 连接的字节数。

当没有数据可以写入而不阻塞时,它会引发由 IO::WaitReadable IO::WaitWritable 扩展的 OpenSSL::SSL::SSLError

IO::WaitReadable 表示 SSL 需要在内部读取,因此在底层 IO 可读后应再次调用 write_nonblock

IO::WaitWritable 表示 SSL 需要在内部写入,因此在底层 IO 可写后应再次调用 write_nonblock

所以 OpenSSL::Buffering#write_nonblock 需要两个rescue子句如下。

# emulates blocking write.
begin
  result = ssl.write_nonblock(str)
rescue IO::WaitReadable
  IO.select([io])
  retry
rescue IO::WaitWritable
  IO.select(nil, [io])
  retry
end

请注意, write_nonblock 从底层 IO 读取的一个原因是当对等方请求新的 TLS/SSL 握手时。有关更多详细信息,请参阅 openssl 常见问题解答。 www.openssl.org/support/faq.html

通过将关键字参数 exception 指定为 false ,您可以指示 write_nonblock 不应引发 IO::Wait*able 异常,而是返回符号 :wait_writable:wait_readable

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Buffering.write_nonblock。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。