ruby-changes:10036
From: akr <ko1@a...>
Date: Fri, 16 Jan 2009 02:07:13 +0900 (JST)
Subject: [ruby-changes:10036] Ruby:r21579 (trunk): * ext/socket/socket.c (addrinfo_s_ip): new method AddrInfo.ip.
akr 2009-01-16 02:06:37 +0900 (Fri, 16 Jan 2009) New Revision: 21579 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21579 Log: * ext/socket/socket.c (addrinfo_s_ip): new method AddrInfo.ip. Modified files: trunk/ChangeLog trunk/ext/socket/socket.c trunk/test/socket/test_addrinfo.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 21578) +++ ChangeLog (revision 21579) @@ -1,3 +1,7 @@ +Fri Jan 16 02:05:55 2009 Tanaka Akira <akr@f...> + + * ext/socket/socket.c (addrinfo_s_ip): new method AddrInfo.ip. + Fri Jan 16 01:42:50 2009 Koichi Sasada <ko1@a...> * thread.c (call_trace_proc): as Matz said ([ruby-core:21183]), Index: ext/socket/socket.c =================================================================== --- ext/socket/socket.c (revision 21578) +++ ext/socket/socket.c (revision 21579) @@ -5362,6 +5362,27 @@ /* * call-seq: + * AddrInfo.ip(host) => addrinfo + * + * returns an addrinfo object for IP address. + * + * AddrInfo.ip("localhost") #=> #<AddrInfo: 127.0.0.1 (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 * * returns an addrinfo object for TCP address. @@ -5372,7 +5393,7 @@ 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 @@ 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 @@ 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 Index: test/socket/test_addrinfo.rb =================================================================== --- test/socket/test_addrinfo.rb (revision 21578) +++ test/socket/test_addrinfo.rb (revision 21579) @@ -7,6 +7,15 @@ require "tempfile" class TestSocketAddrInfo < Test::Unit::TestCase + def test_addrinfo_ip + ai = AddrInfo.ip("127.0.0.1") + assert_equal([0, "127.0.0.1"], Socket.unpack_sockaddr_in(ai)) + assert_equal(Socket::AF_INET, ai.afamily) + assert_equal(Socket::PF_INET, ai.pfamily) + assert_equal(0, ai.socktype) + assert_equal(0, ai.protocol) + end + def test_addrinfo_tcp ai = AddrInfo.tcp("127.0.0.1", 80) assert_equal([80, "127.0.0.1"], Socket.unpack_sockaddr_in(ai)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/