From 565a8b5c7bf7883829a98685b75dee22ec7e1526 Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 15 Jan 2009 17:06:37 +0000 Subject: * ext/socket/socket.c (addrinfo_s_ip): new method AddrInfo.ip. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@21579 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/socket.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'ext/socket') diff --git a/ext/socket/socket.c b/ext/socket/socket.c index cd6acd464..f361e49ba 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -5360,6 +5360,27 @@ addrinfo_s_getaddrinfo(int argc, VALUE *argv, VALUE self) } +/* + * call-seq: + * AddrInfo.ip(host) => addrinfo + * + * returns an addrinfo object for IP address. + * + * AddrInfo.ip("localhost") #=> # + */ +static VALUE +addrinfo_s_ip(VALUE self, VALUE host) +{ + VALUE ret; + rb_addrinfo_t *rai; + ret = addrinfo_firstonly_new(host, Qnil, + INT2NUM(PF_UNSPEC), INT2FIX(0), INT2FIX(0), INT2FIX(0)); + rai = get_addrinfo(ret); + rai->socktype = 0; + rai->protocol = 0; + return ret; +} + /* * call-seq: * AddrInfo.tcp(host, port) => addrinfo @@ -5372,7 +5393,7 @@ static VALUE addrinfo_s_tcp(VALUE self, VALUE host, VALUE port) { return addrinfo_firstonly_new(host, port, - INT2NUM(PF_UNSPEC), INT2NUM(SOCK_STREAM), INT2FIX(IPPROTO_TCP), INT2FIX(0)); + INT2NUM(PF_UNSPEC), INT2NUM(SOCK_STREAM), INT2NUM(IPPROTO_TCP), INT2FIX(0)); } /* @@ -5387,7 +5408,7 @@ static VALUE addrinfo_s_udp(VALUE self, VALUE host, VALUE port) { return addrinfo_firstonly_new(host, port, - INT2NUM(PF_UNSPEC), INT2NUM(SOCK_DGRAM), INT2FIX(IPPROTO_UDP), INT2FIX(0)); + INT2NUM(PF_UNSPEC), INT2NUM(SOCK_DGRAM), INT2NUM(IPPROTO_UDP), INT2FIX(0)); } #ifdef HAVE_SYS_UN_H @@ -5592,6 +5613,7 @@ Init_socket() rb_define_method(rb_cAddrInfo, "initialize", addrinfo_initialize, -1); rb_define_method(rb_cAddrInfo, "inspect", addrinfo_inspect, 0); rb_define_singleton_method(rb_cAddrInfo, "getaddrinfo", addrinfo_s_getaddrinfo, -1); + rb_define_singleton_method(rb_cAddrInfo, "ip", addrinfo_s_ip, 1); rb_define_singleton_method(rb_cAddrInfo, "tcp", addrinfo_s_tcp, 2); rb_define_singleton_method(rb_cAddrInfo, "udp", addrinfo_s_udp, 2); #ifdef HAVE_SYS_UN_H -- cgit