--- !ruby/object:RI::MethodDescription 
aliases: []

block_params: 
comment: 
- !ruby/struct:SM::Flow::P 
  body: Listens for connections, using the specified <tt>int</tt> as the backlog. A call to <em>listen</em> only applies if the <tt>socket</tt> is of type SOCK_STREAM or SOCK_SEQPACKET.
- !ruby/struct:SM::Flow::H 
  level: 3
  text: Parameter
- !ruby/object:SM::Flow::LIST 
  contents: 
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: <tt>backlog</tt> - the maximum length of the queue for pending connections.
  type: :BULLET
- !ruby/struct:SM::Flow::H 
  level: 3
  text: Example 1
- !ruby/struct:SM::Flow::VERB 
  body: "     require 'socket'\n     include Socket::Constants\n     socket = Socket.new( AF_INET, SOCK_STREAM, 0 )\n     sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )\n     socket.bind( sockaddr )\n     socket.listen( 5 )\n"
- !ruby/struct:SM::Flow::H 
  level: 3
  text: "Example 2 (listening on an arbitary port, unix-based systems only):"
- !ruby/struct:SM::Flow::VERB 
  body: "     require 'socket'\n     include Socket::Constants\n     socket = Socket.new( AF_INET, SOCK_STREAM, 0 )\n     socket.listen( 1 )\n"
- !ruby/struct:SM::Flow::H 
  level: 3
  text: Unix-based Exceptions
- !ruby/struct:SM::Flow::P 
  body: On unix based systems the above will work because a new <tt>sockaddr</tt> struct is created on the address ADDR_ANY, for an arbitrary port number as handed off by the kernel. It will not work on Windows, because Windows requires that the <tt>socket</tt> is bound by calling <em>bind</em> before it can <em>listen</em>.
- !ruby/struct:SM::Flow::P 
  body: If the <em>backlog</em> amount exceeds the implementation-dependent maximum queue length, the implementation's maximum queue length will be used.
- !ruby/struct:SM::Flow::P 
  body: "On unix-based based systems the following system exceptions may be raised if the call to <em>listen</em> fails:"
- !ruby/object:SM::Flow::LIST 
  contents: 
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EBADF - the <em>socket</em> argument is not a valid file descriptor
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EDESTADDRREQ - the <em>socket</em> is not bound to a local address, and the protocol does not support listening on an unbound socket
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EINVAL - the <em>socket</em> is already connected
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::ENOTSOCK - the <em>socket</em> argument does not refer to a socket
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EOPNOTSUPP - the <em>socket</em> protocol does not support listen
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EACCES - the calling process does not have approriate privileges
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EINVAL - the <em>socket</em> has been shut down
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::ENOBUFS - insufficient resources are available in the system to complete the call
  type: :BULLET
- !ruby/struct:SM::Flow::H 
  level: 3
  text: Windows Exceptions
- !ruby/struct:SM::Flow::P 
  body: "On Windows systems the following system exceptions may be raised if the call to <em>listen</em> fails:"
- !ruby/object:SM::Flow::LIST 
  contents: 
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::ENETDOWN - the network is down
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EADDRINUSE - the socket's local address is already in use. This usually occurs during the execution of <em>bind</em> but could be delayed if the call to <em>bind</em> was to a partially wildcard address (involving ADDR_ANY) and if a specific address needs to be commmitted at the time of the call to <em>listen</em>
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EINPROGRESS - a Windows Sockets 1.1 call is in progress or the service provider is still processing a callback function
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EINVAL - the <tt>socket</tt> has not been bound with a call to <em>bind</em>.
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EISCONN - the <tt>socket</tt> is already connected
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EMFILE - no more socket descriptors are available
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::ENOBUFS - no buffer space is available
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::ENOTSOC - <tt>socket</tt> is not a socket
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: Errno::EOPNOTSUPP - the referenced <tt>socket</tt> is not a type that supports the <em>listen</em> method
  type: :BULLET
- !ruby/struct:SM::Flow::H 
  level: 3
  text: See
- !ruby/object:SM::Flow::LIST 
  contents: 
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: listen manual pages on unix-based systems
  - !ruby/struct:SM::Flow::LI 
    label: "*"
    body: listen function in Microsoft's Winsock functions reference
  type: :BULLET
full_name: Socket#listen
is_singleton: false
name: listen
params: |
  socket.listen( int ) => 0

visibility: public
