struct Socket::Addrinfo

Overview

Domain name resolver.

Defined in:

socket/addrinfo.cr

Class Method Summary

Instance Method Summary

Instance methods inherited from struct Struct

==(other) : Bool ==, hash(hasher) hash, inspect(io : IO) : Nil inspect, pretty_print(pp) : Nil pretty_print, to_s(io : IO) : Nil to_s

Instance methods inherited from struct Value

==(other : JSON::Any)
==(other : YAML::Any)
==(other)
==
, dup dup

Instance methods inherited from class Object

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other)
===
, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash
hash
, in?(collection : Object) : Bool
in?(*values : Object) : Bool
in?
, inspect(io : IO) : Nil
inspect : String
inspect
, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil!
not_nil!
, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String
to_json
, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil
to_pretty_json
, to_s(io : IO) : Nil
to_s : String
to_s
, to_yaml(io : IO) : Nil
to_yaml : String
to_yaml
, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

Class methods inherited from class Object

from_json(string_or_io, root : String)
from_json(string_or_io)
from_json
, from_yaml(string_or_io : String | IO) from_yaml

Class Method Detail

def self.resolve(domain, 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.

Example:

require "socket"

addrinfos = Socket::Addrinfo.resolve("example.org", "http", type: Socket::Type::STREAM, protocol: Socket::Protocol::TCP)

[View source]
def self.resolve(domain, 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).


[View source]
def self.tcp(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)

[View source]
def self.tcp(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.


[View source]
def self.udp(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)

[View source]
def self.udp(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.


[View source]

Instance Method Detail

def family : Family #

[View source]
def inspect(io : IO) #
Description copied from struct Struct

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)"

[View source]
def ip_address : Socket::IPAddress #

Returns an IPAddress matching this addrinfo.


[View source]
def protocol : Protocol #

[View source]
def size : Int32 #

[View source]
def to_unsafe #

[View source]
def type : Type #

[View source]