struct Socket::IPAddress
inherits Socket::Address
¶
IP address representation.
Holds a binary representation of an IP address, either translated from a
String
, or directly received from an opened connection (e.g.
Socket#local_address
, Socket#receive
).
Example:
require "socket"
Socket::IPAddress.new("127.0.0.1", 8080)
Socket::IPAddress.new("fe80::2ab2:bdff:fe59:8e2c", 1234)
IPAddress
won't resolve domains, including localhost
. If you must
resolve an IP, or don't know whether a String
contains an IP or a domain
name, you should use Addrinfo.resolve
instead.
Constants¶
BROADCAST = "255.255.255.255"
¶
"255.255.255.255"
BROADCAST6 = "ff0X::1"
¶
"ff0X::1"
LOOPBACK = "127.0.0.1"
¶
"127.0.0.1"
LOOPBACK6 = "::1"
¶
"::1"
UNSPECIFIED = "0.0.0.0"
¶
"0.0.0.0"
UNSPECIFIED6 = "::"
¶
"::"
Class methods¶
.parse(uri : String)
¶
(uri : String)
Parses a Socket::IPAddress
from an URI.
It expects the URI to include <scheme>://<host>:<port>
where scheme
as
well as any additional URI components (such as path
or query
) are ignored.
host
must be an IP address (v4 or v6), otherwise Socket::Error
will be
raised. Domain names will not be resolved.
require "socket"
Socket::IPAddress.parse("tcp://127.0.0.1:8080") # => Socket::IPAddress.new("127.0.0.1", 8080)
Socket::IPAddress.parse("udp://[::1]:8080") # => Socket::IPAddress.new("::1", 8080)
.valid_port?(port : Int) : Bool
¶
(port : Int) : Bool
Returns true
if port is a valid port number.
Valid port numbers are in the range 0..65_535
.
.from(sockaddr : Pointer(LibC::Sockaddr), addrlen) : IPAddress
¶
(sockaddr : Pointer(LibC::Sockaddr), addrlen) : IPAddress
Creates an IPAddress
from the internal OS representation. Supports both
INET and INET6 families.
.parse(uri : URI) : IPAddress
¶
(uri : URI) : IPAddress
Parses a Socket::IPAddress
from an URI.
It expects the URI to include <scheme>://<host>:<port>
where scheme
as
well as any additional URI components (such as path
or query
) are ignored.
host
must be an IP address (v4 or v6), otherwise Socket::Error
will be
raised. Domain names will not be resolved.
require "socket"
Socket::IPAddress.parse("tcp://127.0.0.1:8080") # => Socket::IPAddress.new("127.0.0.1", 8080)
Socket::IPAddress.parse("udp://[::1]:8080") # => Socket::IPAddress.new("::1", 8080)
Methods¶
#==(other : self)
¶
(other : self)
#address : String
¶
: String
Returns a String
representation of the IP address.
Example:
ip_address = socket.remote_address
ip_address.address # => "127.0.0.1"
#hash(hasher)
¶
(hasher)
#inspect(io : IO) : Nil
¶
(io : IO) : Nil
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)"
#loopback? : Bool
¶
: Bool
Returns true
if this IP is a loopback address.
In the IPv4 family, loopback addresses are all addresses in the subnet
127.0.0.0/24
. In IPv6 ::1
is the loopback address.
#private? : Bool
¶
: Bool
Returns true
if this IP is a private address.
IPv4 addresses in 10.0.0.0/8
, 172.16.0.0/12
and 192.168.0.0/16
as defined in RFC 1918
and IPv6 Unique Local Addresses in fc00::/7
as defined in RFC 4193 are considered private.
#unspecified? : Bool
¶
: Bool
Returns true
if this IP is an unspecified address, either the IPv4 address 0.0.0.0
or the IPv6 address ::
.