本文简要介绍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 Buffering.read_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.write_nonblock。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。