class Generic
Endpoints represent a way of connecting or binding to an address.
Definitions
def hostname
Implementation
def hostname
@options[:hostname]
end
def reuse_port?
If SO_REUSEPORT
is enabled on a socket, the socket can be successfully bound even if there are existing sockets bound to the same address, as long as all prior bound sockets also had SO_REUSEPORT
set before they were bound.
Implementation
def reuse_port?
@options[:reuse_port]
end
def reuse_address?
If SO_REUSEADDR
is enabled on a socket prior to binding it, the socket can be successfully bound unless there is a conflict with another socket bound to exactly the same combination of source address and port. Additionally, when set, binding a socket to the address of an existing socket in TIME_WAIT
is not an error.
Implementation
def reuse_address?
@options[:reuse_address]
end
def linger
Controls SO_LINGER. The amount of time the socket will stay in the TIME_WAIT
state after being closed.
Implementation
def linger
@options[:linger]
end
def timeout
Implementation
def timeout
@options[:timeout]
end
def local_address
Implementation
def local_address
@options[:local_address]
end
def bind(wrapper = Wrapper.default, &block)
Bind a socket to the given address. If a block is given, the socket will be automatically closed when the block exits.
Signature
-
parameter
wrapper
Wrapper
The wrapper to use for binding.
-
yields
{|socket| ...}
An optional block which will be passed the socket.
-
parameter
socket
Socket
The socket which has been bound.
-
parameter
-
returns
Array(Socket)
the bound socket
Implementation
def bind(wrapper = Wrapper.default, &block)
raise NotImplementedError
end
def connect(wrapper = Wrapper.default, &block)
Connects a socket to the given address. If a block is given, the socket will be automatically closed when the block exits.
Signature
-
parameter
wrapper
Wrapper
The wrapper to use for connecting.
Implementation
def connect(wrapper = Wrapper.default, &block)
raise NotImplementedError
end
def accept(wrapper = Wrapper.default, &block)
Bind and accept connections on the given address.
Signature
-
parameter
wrapper
Wrapper
The wrapper to use for accepting connections.
Implementation
def accept(wrapper = Wrapper.default, &block)
bind(wrapper) do |server|
wrapper.accept(server, **@options, &block)
end
end
def each
Enumerate all discrete paths as endpoints.
Signature
-
yields
{|endpoint| ...}
A block which will be passed each endpoint.
-
parameter
endpoint
Endpoint
The endpoint.
-
parameter
Implementation
def each
return to_enum unless block_given?
yield self
end
def self.parse(string, **options)
Create an Endpoint instance by URI scheme. The host and port of the URI will be passed to the Endpoint factory method, along with any options.
You should not use untrusted input as it may execute arbitrary code.
Implementation
def self.parse(string, **options)
uri = URI.parse(string)
IO::Endpoint.public_send(uri.scheme, uri.host, uri.port, **options)
end