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


Ruby Socket.accept_nonblock用法及代码示例


本文简要介绍ruby语言中 Socket.accept_nonblock 的用法。

用法

accept_nonblock([options]) → [client_socket, client_addrinfo]

在为底层文件说明符设置 O_NONBLOCK 后,使用 accept(2) 接受传入连接。它返回一个数组,其中包含传入连接的接受套接字 client_socket Addrinfo client_addrinfo

示例

# In one script, start this first
require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(2200, 'localhost')
socket.bind(sockaddr)
socket.listen(5)
begin # emulate blocking accept
  client_socket, client_addrinfo = socket.accept_nonblock
rescue IO::WaitReadable, Errno::EINTR
  IO.select([socket])
  retry
end
puts "The client said, '#{client_socket.readline.chomp}'"
client_socket.puts "Hello from script one!"
socket.close

# In another script, start this second
require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(2200, 'localhost')
socket.connect(sockaddr)
socket.puts "Hello from script 2."
puts "The server said, '#{socket.readline.chomp}'"
socket.close

如果对 accept_nonblock 的调用失败,请参阅 Socket#accept 以了解可能引发的异常。

Socket#accept_nonblock 可能引发与accept(2) 失败相对应的任何错误,包括Errno::EWOULDBLOCK。

如果异常是 Errno::EWOULDBLOCK、Errno::EAGAIN、Errno::ECONNABORTED 或 Errno::EPROTO,则通过 IO::WaitReadable 对其进行扩展。所以 IO::WaitReadable 可以用来挽救重试accept_nonblock的异常。

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

参看

相关用法


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