Class: Async::IO::HostEndpoint
- Defined in:
- lib/async/io/host_endpoint.rb
Instance Attribute Summary
Attributes inherited from Endpoint
Instance Method Summary collapse
-
#bind {|Socket| ... } ⇒ Array<Socket>
Invokes the given block for every address which can be bound to.
-
#connect {|Socket| ... } ⇒ Socket
Try to connect to the given host by connecting to each address in sequence until a connection is made.
- #each {|AddressEndpoint| ... } ⇒ Object
- #hostname ⇒ Object
-
#initialize(specification, **options) ⇒ HostEndpoint
constructor
A new instance of HostEndpoint.
- #to_s ⇒ Object
Methods inherited from Endpoint
#accept, each, parse, #reuse_port, socket, ssl, tcp, #timeout, try_convert, udp, unix
Constructor Details
#initialize(specification, **options) ⇒ HostEndpoint
Returns a new instance of HostEndpoint.
26 27 28 29 30 |
# File 'lib/async/io/host_endpoint.rb', line 26 def initialize(specification, **) super(**) @specification = specification end |
Instance Method Details
#bind {|Socket| ... } ⇒ Array<Socket>
Invokes the given block for every address which can be bound to.
64 65 66 67 68 |
# File 'lib/async/io/host_endpoint.rb', line 64 def bind(&block) Addrinfo.foreach(*@specification).collect do |address| Socket.bind(address, **@options, &block) end end |
#connect {|Socket| ... } ⇒ Socket
Try to connect to the given host by connecting to each address in sequence until a connection is made.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/async/io/host_endpoint.rb', line 46 def connect(&block) last_error = nil Addrinfo.foreach(*@specification) do |address| begin return Socket.connect(address, **@options, &block) # This is a little bit risky. In theory, what it is supposed to do is catch the failed connection, and try the next address. In practice, it can catch other kinds of failures. Ideally, it only applies to `#connect`, but it also applies to what's executed in `&block`. rescue last_error = $! end end raise last_error end |
#each {|AddressEndpoint| ... } ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/async/io/host_endpoint.rb', line 71 def each return to_enum unless block_given? Addrinfo.foreach(*@specification) do |address| yield AddressEndpoint.new(address, **@options) end end |
#hostname ⇒ Object
38 39 40 |
# File 'lib/async/io/host_endpoint.rb', line 38 def hostname @specification.first end |
#to_s ⇒ Object
32 33 34 35 36 |
# File 'lib/async/io/host_endpoint.rb', line 32 def to_s nodename, service, family, socktype, protocol, flags = @specification "\#<#{self.class} name=#{nodename.inspect} service=#{service.inspect} family=#{family.inspect} type=#{socktype.inspect} protocol=#{protocol.inspect} flags=#{flags.inspect}>" end |