Socket::Addrinfo
struct Socket::Addrinfo
Overview
Domain name resolver.
Defined in:
socket/addrinfo.crClass Method Summary
- .new(addrinfo : Pointer(LibC::Addrinfo))
- .resolve(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.
- .resolve(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil, &block)
Resolves a domain that best matches the given options.
- .tcp(domain, service, family = Family::UNSPEC, timeout = nil) : Array(Addrinfo)
- .tcp(domain, service, family = Family::UNSPEC, timeout = nil, &block)
Resolves a domain for the TCP protocol with STREAM type, and yields each possible
Addrinfo
- - .udp(domain, service, family = Family::UNSPEC, timeout = nil) : Array(Addrinfo)
- .udp(domain, service, family = Family::UNSPEC, timeout = nil, &block)
Resolves a domain for the UDP protocol with DGRAM type, and yields each possible
Addrinfo
-
Instance Method Summary
- #family : Family
- #ip_address
Returns an
IPAddress
matching this addrinfo. - #protocol : Protocol
- #size : Int32
- #to_unsafe
- #type : Type
Instance methods inherited from struct Struct
==(other : self) : Bool ==, hash : Int32 hash, inspect(io : IO) : Nil inspect, pretty_print(pp) : Nil pretty_print, to_s(io) to_s Instance methods inherited from struct Value
==(other) ==, dup dup Instance methods inherited from class Object
!=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, class class, dup dup, hash hash, inspect(io : IO)
inspect inspect, itself itself, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, tap(&block) tap, to_json(io : IO)
to_json to_json, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ") to_pretty_json, to_s
to_s(io : IO) to_s, to_yaml(io : IO)
to_yaml to_yaml, try(&block) try
Class methods inherited from class Object
from_json(string_or_io, root : String) : selffrom_json(string_or_io) : self from_json, from_yaml(string_or_io) : self from_yaml
Class Method Detail
def self.resolve(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil) : Array(Addrinfo)Source
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 intented socket type (e.g.
Type::STREAM
) and must be specified. -
protocol is the intented socket protocol (e.g.
Protocol::TCP
) and should be specified.
Example:
addrinfos = Socket::Addrinfo.resolve("example.org", "http", type: Socket::Type::STREAM, protocol: Socket::Protocol::TCP)
def self.resolve(domain, service, family : Family? = nil, type : Type = nil, protocol : Protocol = Protocol::IP, timeout = nil, &block)Source
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
).
def self.tcp(domain, service, family = Family::UNSPEC, timeout = nil, &block)Source
def self.udp(domain, service, family = Family::UNSPEC, timeout = nil, &block)Source
Instance Method Detail
def to_unsafeSource
© 2012–2017 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.22.0/Socket/Addrinfo.html