Class: Async::IO::TCPServer

Inherits:
TCPSocket show all
Includes:
Server
Defined in:
lib/async/io/tcp_socket.rb

Overview

Asynchronous TCP server wrappper.

Constant Summary

Constants inherited from Generic

Generic::WRAPPERS

Instance Attribute Summary

Attributes inherited from TCPSocket

#buffer

Instance Method Summary collapse

Methods included from Server

#accept_each

Methods inherited from BasicSocket

#type

Methods inherited from Generic

#nonblock, #nonblock?, #read, #wait, wrap, wrap_blocking_method, wraps, #write

Constructor Details

#initialize(*args) ⇒ TCPServer

Returns a new instance of TCPServer.



65
66
67
68
69
70
71
72
# File 'lib/async/io/tcp_socket.rb', line 65

def initialize(*args)
  if args.first.is_a? ::TCPServer
    super(args.first)
  else
    # We assume this operation doesn't block (for long):
    super(::TCPServer.new(*args))
  end
end

Instance Method Details

#accept(task: Task.current) ⇒ Object Also known as: accept_nonblock, sysaccept



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/async/io/tcp_socket.rb', line 74

def accept(task: Task.current)
  peer, address = async_send(:accept_nonblock)
  
  wrapper = TCPSocket.new(peer)
  
  return wrapper, address unless block_given?
  
  begin
    yield wrapper, address
  ensure
    wrapper.close
  end
end