[前][次][番号順一覧][スレッド一覧]

ruby-changes:10098

From: akr <ko1@a...>
Date: Sun, 18 Jan 2009 01:40:14 +0900 (JST)
Subject: [ruby-changes:10098] Ruby:r21641 (trunk): * ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.

akr	2009-01-18 01:39:03 +0900 (Sun, 18 Jan 2009)

  New Revision: 21641

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21641

  Log:
    * ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.
    * ext/socket/raddrinfo.c (rb_check_sockaddr_string_type): defined.
    
    * ext/socket/rubysocket.h (rb_check_sockaddr_string_type): declared.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/raddrinfo.c
    trunk/ext/socket/rubysocket.h
    trunk/ext/socket/socket.c
    trunk/test/socket/test_addrinfo.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21640)
+++ ChangeLog	(revision 21641)
@@ -1,3 +1,11 @@
+Sun Jan 18 01:37:50 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.
+
+	* ext/socket/raddrinfo.c (rb_check_sockaddr_string_type): defined.
+
+	* ext/socket/rubysocket.h (rb_check_sockaddr_string_type): declared.
+
 Sat Jan 17 22:01:15 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/lib/socket.rb: new file.
Index: ext/socket/rubysocket.h
===================================================================
--- ext/socket/rubysocket.h	(revision 21640)
+++ ext/socket/rubysocket.h	(revision 21641)
@@ -150,6 +150,7 @@
 #define SockAddrStringValuePtr(v) sockaddr_string_value_ptr(&(v))
 VALUE sockaddr_string_value(volatile VALUE *);
 char *sockaddr_string_value_ptr(volatile VALUE *);
+VALUE rb_check_sockaddr_string_type(VALUE);
 
 NORETURN(void raise_socket_error(const char *, int));
 
Index: ext/socket/raddrinfo.c
===================================================================
--- ext/socket/raddrinfo.c	(revision 21640)
+++ ext/socket/raddrinfo.c	(revision 21641)
@@ -1520,6 +1520,14 @@
 }
 
 VALUE
+rb_check_sockaddr_string_type(VALUE val)
+{
+    if (TYPE(val) == RUBY_T_DATA && IS_ADDRINFO(val))
+        return addrinfo_to_sockaddr(val);
+    return rb_check_string_type(val);
+}
+
+VALUE
 fd_socket_addrinfo(int fd, struct sockaddr *addr, socklen_t len)
 {
     int family;
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 21640)
+++ ext/socket/socket.c	(revision 21641)
@@ -1134,7 +1134,7 @@
     if (!NIL_P(flags)) {
 	fl = NUM2INT(flags);
     }
-    tmp = rb_check_string_type(sa);
+    tmp = rb_check_sockaddr_string_type(sa);
     if (!NIL_P(tmp)) {
 	sa = tmp;
 	if (sizeof(ss) < RSTRING_LEN(sa)) {
Index: test/socket/test_addrinfo.rb
===================================================================
--- test/socket/test_addrinfo.rb	(revision 21640)
+++ test/socket/test_addrinfo.rb	(revision 21641)
@@ -134,6 +134,11 @@
     s3.close if s3 && !s3.closed?
   end
 
+  def test_socket_getnameinfo
+     ai = AddrInfo.udp("127.0.0.1", 8888)
+     assert_equal(["127.0.0.1", "8888"], Socket.getnameinfo(ai, Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV))
+  end
+
   def test_basicsocket_local_address
     s1 = Socket.new(:INET, :DGRAM, 0)
     s1.bind(Socket.sockaddr_in(0, "127.0.0.1"))

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]