IO::EndpointSourceIOEndpointGeneric

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.

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.

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