本文简要介绍ruby语言中  UNIXServer.listen  的用法。
用法
listen( int ) → 0使用指定的int 作为 backlog 侦听连接。仅当 socket 的类型为 SOCK_STREAM 或 SOCK_SEQPACKET 时,才能调用 listen。
参数
- 
backlog- 待处理连接队列的最大长度。
示例 1
require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
socket.bind( sockaddr )
socket.listen( 5 )示例 2(监听任意端口,仅基于 unix 的系统):
require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
socket.listen( 1 )基于 Unix 的异常
在基于 unix 的系统上,上述方法将起作用,因为在地址 ADDR_ANY 上创建了一个新的 sockaddr 结构,用于内核传递的任意端口号。它不适用于 Windows,因为 Windows 要求 socket 必须通过调用 bind 才能绑定 listen 。
如果 backlog 数量超过实现相关的最大队列长度,将使用实现的最大队列长度。
在基于 unix 的系统上,如果对 listen 的调用失败,可能会引发以下系统异常:
- 
Errno::EBADF - socket参数不是有效的文件说明符
- 
Errno::EDESTADDRREQ - socket未绑定到本地地址,并且协议不支持侦听未绑定的套接字
- 
Errno::EINVAL - socket已连接
- 
Errno::ENOTSOCK - socket参数不引用套接字
- 
Errno::EOPNOTSUPP - socket协议不支持监听
- 
Errno::EACCES - 调用进程没有适当的权限 
- 
Errno::EINVAL - socket已关闭
- 
Errno::ENOBUFS - 系统资源不足,无法完成调用 
Windows 异常
在 Windows 系统上,如果对 listen 的调用失败,可能会引发以下系统异常:
- 
Errno::ENETDOWN - 网络已关闭 
- 
Errno::EADDRINUSE - 套接字的本地地址已被使用。这通常发生在 bind的执行期间,但如果对bind的调用是针对部分通配符地址(涉及 ADDR_ANY)并且如果在调用时需要提交特定地址,则可能会延迟listen
- 
Errno::EINPROGRESS - Windows Sockets 1.1 调用正在进行或服务提供者仍在处理回调函数 
- 
Errno::EINVAL - socket尚未与对bind的调用绑定。
- 
Errno::EISCONN - socket已连接
- 
Errno::EMFILE - 没有更多的套接字说明符可用 
- 
Errno::ENOBUFS - 没有可用的缓冲区空间 
- 
Errno::ENOTSOC - socket不是套接字
- 
Errno::EOPNOTSUPP - 引用的 socket不是支持listen方法的类型
参看
- 
在基于 Unix 的系统上收听手册页 
- 
微软 Winsock 函数参考中的监听函数 
相关用法
- Ruby UNIXServer.accept用法及代码示例
- Ruby UNIXServer.new用法及代码示例
- Ruby UNIXServer.accept_nonblock用法及代码示例
- Ruby UNIXServer.sysaccept用法及代码示例
- Ruby UNIXSocket.new用法及代码示例
- Ruby UNIXSocket.addr用法及代码示例
- Ruby UNIXSocket.recv_io用法及代码示例
- Ruby UNIXSocket.recvfrom用法及代码示例
- Ruby UNIXSocket.peeraddr用法及代码示例
- Ruby UNIXSocket.send_io用法及代码示例
- Ruby UNIXSocket.pair用法及代码示例
- Ruby UNIXSocket.path用法及代码示例
- Ruby UndefinedConversionError.source_encoding用法及代码示例
- Ruby UnboundMethod.original_name用法及代码示例
- Ruby URI.parse用法及代码示例
- Ruby UID.change_privilege用法及代码示例
- Ruby Util.unescape用法及代码示例
- Ruby Util.url_encode用法及代码示例
- Ruby UnboundMethod.bind用法及代码示例
- Ruby URI模块用法及代码示例
- Ruby UID.euid用法及代码示例
- Ruby UncaughtThrowError类用法及代码示例
- Ruby Util.pretty用法及代码示例
- Ruby UID.uid用法及代码示例
- Ruby UnwindDetails.all_requirements用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 UNIXServer.listen。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
