From a90d8b8a7399b7cf6f22009cd90248705deb027e Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Mon, 24 Feb 2014 11:21:49 +0900 Subject: add Socket.getaddrinfo. --- mrblib/socket.rb | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) (limited to 'mrblib/socket.rb') diff --git a/mrblib/socket.rb b/mrblib/socket.rb index b04375f60..d103dbf1d 100644 --- a/mrblib/socket.rb +++ b/mrblib/socket.rb @@ -139,6 +139,21 @@ class Addrinfo attr_reader :protocol attr_reader :socktype + 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 + def to_sockaddr @sockaddr end @@ -189,35 +204,21 @@ class BasicSocket end class IPSocket - def self.getddress(host) + def self.getaddress(host) Addrinfo.ip(host).ip_address end - def _ai_to_array(ai) - case ai.afamily - 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 - [ s, ai.ip_port, ai.ip_address, ai.ip_address ] - end - def addr - _ai_to_array(Addrinfo.new(self.getsockname)) + Addrinfo.new(self.getsockname)._to_array end def peeraddr - _ai_to_array(Addrinfo.new(self.getpeername)) + Addrinfo.new(self.getpeername)._to_array end def recvfrom(maxlen, flags=0) msg, sa = _recvfrom(maxlen, flags) - [ msg, _ai_to_array(Addrinfo.new(sa)) ] + [ msg, Addrinfo.new(sa)._to_array ] end end @@ -328,9 +329,16 @@ class Socket #def self.accept_loop - # def self.getaddrinfo - # by Addrinfo.getaddrinfo - #end + def self.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0) + Addrinfo.getaddrinfo(nodename, servname, family, socktype, protocol, flags).map { |ai| + ary = ai._to_array + ary[2] = nodename + ary[4] = ai.afamily + ary[5] = ai.socktype + ary[6] = ai.protocol + ary + } + end #def self.getnameinfo #def self.ip_address_list -- cgit v1.2.3