Class: Addrinfo

Inherits:
Object
  • Object
show all
Defined in:
mrbgems/mruby-socket/mrblib/socket.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sockaddr, family = Socket::PF_UNSPEC, socktype = 0, protocol = 0) ⇒ Addrinfo

Returns a new instance of Addrinfo.



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 2

def initialize(sockaddr, family=Socket::PF_UNSPEC, socktype=0, protocol=0)
  @hostname = nil
  if sockaddr.is_a? Array
    sary = sockaddr
    if sary[0] == 'AF_INET' || sary[0] == 'AF_INET6'
      @sockaddr = Socket.sockaddr_in(sary[1], sary[3])
      @hostname = sary[2]
    elsif sary[0] == 'AF_UNIX'
      @sockaddr = Socket.sockaddr_un(sary[1])
    end
  else
    @sockaddr = sockaddr.dup
  end
  if family == Socket::PF_UNSPEC or family == nil
    @family = Socket._sockaddr_family(@sockaddr)
  else
    @family = family
  end
  @socktype = socktype
  @protocol = protocol
end

Instance Attribute Details

#protocolObject (readonly)

Returns the value of attribute protocol.



136
137
138
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 136

def protocol
  @protocol
end

#socktypeObject (readonly)

Returns the value of attribute socktype.



137
138
139
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 137

def socktype
  @socktype
end

Class Method Details

.foreach(nodename, service, family = nil, socktype = nil, protocol = nil, flags = 0, &block) ⇒ Object



24
25
26
27
28
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 24

def self.foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0, &block)
  a = self.getaddrinfo(nodename, service, family, socktype, protocol, flags)
  a.each { |ai| block.call(ai) }
  a
end

.ip(host) ⇒ Object



30
31
32
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 30

def self.ip(host)
  Addrinfo.new(Socket.sockaddr_in(0, host))
end

.tcp(host, port) ⇒ Object



34
35
36
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 34

def self.tcp(host, port)
  Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_STREAM, Socket::IPPROTO_TCP)[0]
end

.udp(host, port) ⇒ Object



38
39
40
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 38

def self.udp(host, port)
  Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_DGRAM, Socket::IPPROTO_UDP)[0]
end

.unix(path, socktype = Socket::SOCK_STREAM) ⇒ Object



42
43
44
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 42

def self.unix(path, socktype=Socket::SOCK_STREAM)
  Addrinfo.new(Socket.sockaddr_un(path), Socket::AF_UNIX, socktype)
end

Instance Method Details

#_to_arrayObject



139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 139

def _to_array
  case @family
  when Socket::AF_INET
    s = "AF_INET"
  when Socket::AF_INET6
    s = "AF_INET6"
  when Socket::AF_UNIX
    s = "AF_UNIX"
  else
    s = "(unknown AF)"
  end
  addr, port = self.getnameinfo(Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
  [ s, port.to_i, addr, addr ]
end

#afamilyObject



46
47
48
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 46

def afamily
  @family
end

#inspectObject

def family_addrinfo(host, port=nil) def getnameinfo(flags=0) Socket.getnameinfo end



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 61

def inspect
  if ipv4? or ipv6?
    if @protocol == Socket::IPPROTO_TCP or (@socktype == Socket::SOCK_STREAM and @protocol == 0)
      proto = 'TCP'
    elsif @protocol == Socket::IPPROTO_UDP or (@socktype == Socket::SOCK_DGRAM and @protocol == 0)
      proto = 'UDP'
    else
      proto = '???'
    end
  else
    proto = "SOCK_STREAM"
  end
  "#<Addrinfo: #{inspect_sockaddr} #{proto}>"
end

#inspect_sockaddrObject



76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 76

def inspect_sockaddr
  if ipv4?
    a, p = ip_unpack
    "#{a}:#{p}"
  elsif ipv6?
    a, p = ip_unpack
    "[#{a}]:#{p}"
  elsif unix?
    unix_path
  else
    '???'
  end
end

#ip?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 90

def ip?
  ipv4? or ipv6?
end

#ip_addressObject



94
95
96
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 94

def ip_address
  ip_unpack[0]
end

#ip_portObject



98
99
100
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 98

def ip_port
  ip_unpack[1]
end

#ip_unpackObject



102
103
104
105
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 102

def ip_unpack
  h, p = getnameinfo(Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
  [ h, p.to_i ]
end

#ipv4?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 107

def ipv4?
  @family == Socket::AF_INET
end

#ipv6?Boolean

def ipv4_loopback? def ipv4_multicast? def ipv4_private?

Returns:

  • (Boolean)


115
116
117
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 115

def ipv6?
  @family == Socket::AF_INET6
end

#pfamilyObject

def ipv6_loopback? def ipv6_mc_global? def ipv6_mc_linklocal? def ipv6_mc_nodelocal? def ipv6_mc_orilocal? def ipv6_mc_sitelocal? def ipv6_multicast? def ipv6_to_ipv4 def ipv6_unspecified def ipv6_v4compat? def ipv6_v4mapped? def listen(backlog=5)



132
133
134
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 132

def pfamily
  @family
end

#to_sockaddrObject Also known as: to_s



154
155
156
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 154

def to_sockaddr
  @sockaddr
end

#unix?Boolean

Returns:

  • (Boolean)


160
161
162
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 160

def unix?
  @family == Socket::AF_UNIX
end