struct Socket::Addrinfo
inherits Struct
¶
Domain name resolver.
Class methods¶
.resolve(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil) : Array(Addrinfo)
¶
(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil) : Array(Addrinfo)
Resolves a domain that best matches the given options.
- domain may be an IP address or a domain name.
- service may be a port number or a service name. It must be specified,
because different servers may handle the
mail
orhttp
services for example. - family is optional and defaults to
Family::UNSPEC
- type is the intended socket type (e.g.
Type::STREAM
) and must be specified. - protocol is the intended socket protocol (e.g.
Protocol::TCP
) and should be specified.
Example:
require "socket"
addrinfos = Socket::Addrinfo.resolve("example.org", "http", type: Socket::Type::STREAM, protocol: Socket::Protocol::TCP)
.resolve(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil
¶
(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil
Resolves a domain that best matches the given options.
Yields each possible Addrinfo
resolution since a domain may resolve to
many IP. Implementations are supposed to try all the addresses until the
socket is connected (or bound) or there are no addresses to try anymore.
Raising is an expensive operation, so instead of raising on a connect or bind error, just to rescue it immediately after, the block is expected to return the error instead, which will be raised once there are no more addresses to try.
The iteration will be stopped once the block returns something that isn't
an Exception
(e.g. a Socket
or nil
).
.tcp(domain, service, family = Family::UNSPEC, timeout = nil) : Array(Addrinfo)
¶
(domain, service, family = Family::UNSPEC, timeout = nil) : Array(Addrinfo)
Resolves domain for the TCP protocol and returns an Array
of possible
Addrinfo
. See #resolve
for details.
Example:
require "socket"
addrinfos = Socket::Addrinfo.tcp("example.org", 80)
.tcp(domain, service, family = Family::UNSPEC, timeout = nil
¶
(domain, service, family = Family::UNSPEC, timeout = nil
Resolves a domain for the TCP protocol with STREAM type, and yields each
possible Addrinfo
. See #resolve
for details.
.udp(domain, service, family = Family::UNSPEC, timeout = nil) : Array(Addrinfo)
¶
(domain, service, family = Family::UNSPEC, timeout = nil) : Array(Addrinfo)
Resolves domain for the UDP protocol and returns an Array
of possible
Addrinfo
. See #resolve
for details.
Example:
require "socket"
addrinfos = Socket::Addrinfo.udp("example.org", 53)
.udp(domain, service, family = Family::UNSPEC, timeout = nil
¶
(domain, service, family = Family::UNSPEC, timeout = nil
Resolves a domain for the UDP protocol with DGRAM type, and yields each
possible Addrinfo
. See #resolve
for details.