struct

Socket::Addrinfo

Inherits Crystal::System::Addrinfo / Struct / Value / Object

Domain name resolver.

Query Concurrency Behaviour

On most platforms, DNS queries are currently resolved synchronously. Calling a resolve method blocks the entire thread until it returns. This can cause latencies, especially in single-threaded processes.

DNS queries resolve asynchronously on the following platforms:

  • Windows 8 and higher

NOTE: Follow the discussion in Async DNS resolution (#13619) for more details.

Class methods

resolve(domain : String, service, family : Family | Nil = 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 or http 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.
  • timeout is optional and specifies the maximum time to wait before IO::TimeoutError is raised. Currently this is only supported on Windows.

Example:

require "socket"

addrinfos = Socket::Addrinfo.resolve("example.org", "http", type: Socket::Type::STREAM, protocol: Socket::Protocol::TCP)
Source
resolve(domain : String, service, family : Family | Nil = 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).

Source
tcp(domain : String, 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)
Source
tcp(domain : String, 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.

Source
udp(domain : String, 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)
Source
udp(domain : String, 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.

Source

Instance methods

family
Source
inspect(io : IO)

Appends this struct's name and instance variables names and values to the given IO.

struct Point
  def initialize(@x : Int32, @y : Int32)
  end
end

p1 = Point.new 1, 2
p1.to_s    # "Point(@x=1, @y=2)"
p1.inspect # "Point(@x=1, @y=2)"
Source
ip_address

Returns an IPAddress matching this addrinfo.

Source
protocol
Source
size
Source
type
Source

Nested types