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

ruby-changes:9714

From: akr <ko1@a...>
Date: Fri, 2 Jan 2009 00:15:54 +0900 (JST)
Subject: [ruby-changes:9714] Ruby:r21254 (trunk): * ext/socket/socket.c (family_arg): extracted from

akr	2009-01-02 00:15:31 +0900 (Fri, 02 Jan 2009)

  New Revision: 21254

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

  Log:
    * ext/socket/socket.c (family_arg): extracted from
      setup_domain_and_type.
      (socktype_arg): ditto.
      (udp_init): use family_arg.
      (sock_s_gethostbyaddr): ditto.
      (sock_s_getaddrinfo): ditto.
      (sock_s_getnameinfo): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/socket.c
    trunk/test/socket/test_udp.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21253)
+++ ChangeLog	(revision 21254)
@@ -1,3 +1,13 @@
+Fri Jan  2 00:12:27 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/socket.c (family_arg): extracted from
+	  setup_domain_and_type.
+	  (socktype_arg): ditto.
+	  (udp_init): use family_arg.
+	  (sock_s_gethostbyaddr): ditto.
+	  (sock_s_getaddrinfo): ditto.
+	  (sock_s_getnameinfo): ditto.
+
 Thu Jan  1 22:27:55 2009  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* spec/default.mspec: fix for builddir != srcdir
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 21253)
+++ ext/socket/socket.c	(revision 21254)
@@ -241,6 +241,52 @@
 #define close closesocket
 #endif
 
+static int
+family_arg(VALUE domain)
+{
+    /* convert AF_INET, etc. */
+    VALUE tmp;
+    char *ptr;
+    int ret;
+
+    tmp = rb_check_string_type(domain);
+    if (!NIL_P(tmp)) {
+	domain = tmp;
+	rb_check_safe_obj(domain);
+        ptr = RSTRING_PTR(domain);
+        if (family_to_int(ptr, RSTRING_LEN(domain), &ret) == -1)
+	    rb_raise(rb_eSocket, "unknown socket domain %s", ptr);
+    }
+    else {
+	ret = NUM2INT(domain);
+    }
+    return ret;
+}
+
+static int
+socktype_arg(VALUE type)
+{
+    /* convert SOCK_STREAM, etc. */
+    VALUE tmp;
+    char *ptr;
+    int ret;
+
+    tmp = rb_check_string_type(type);
+    if (!NIL_P(tmp)) {
+	type = tmp;
+	rb_check_safe_obj(type);
+	ptr = RSTRING_PTR(type);
+        if (socktype_to_int(ptr, RSTRING_LEN(type), &ret) == -1)
+	    rb_raise(rb_eSocket, "unknown socket type %s", ptr);
+    }
+    else {
+	ret = NUM2INT(type);
+    }
+
+    return ret;
+}
+
+
 static VALUE
 init_sock(VALUE sock, int fd)
 {
@@ -1754,14 +1800,14 @@
 udp_init(int argc, VALUE *argv, VALUE sock)
 {
     VALUE arg;
-    int socktype = AF_INET;
+    int family = AF_INET;
     int fd;
 
     rb_secure(3);
     if (rb_scan_args(argc, argv, "01", &arg) == 1) {
-	socktype = NUM2INT(arg);
+	family = family_arg(arg);
     }
-    fd = ruby_socket(socktype, SOCK_DGRAM, 0);
+    fd = ruby_socket(family, SOCK_DGRAM, 0);
     if (fd < 0) {
 	rb_sys_fail("socket(2) - udp");
     }
@@ -2273,31 +2319,8 @@
 static void
 setup_domain_and_type(VALUE domain, int *dv, VALUE type, int *tv)
 {
-    VALUE tmp;
-    char *ptr;
-
-    tmp = rb_check_string_type(domain);
-    if (!NIL_P(tmp)) {
-	domain = tmp;
-	rb_check_safe_obj(domain);
-        ptr = RSTRING_PTR(domain);
-        if (family_to_int(ptr, RSTRING_LEN(domain), dv) == -1)
-	    rb_raise(rb_eSocket, "unknown socket domain %s", ptr);
-    }
-    else {
-	*dv = NUM2INT(domain);
-    }
-    tmp = rb_check_string_type(type);
-    if (!NIL_P(tmp)) {
-	type = tmp;
-	rb_check_safe_obj(type);
-	ptr = RSTRING_PTR(type);
-        if (socktype_to_int(ptr, RSTRING_LEN(type), tv) == -1)
-	    rb_raise(rb_eSocket, "unknown socket type %s", ptr);
-    }
-    else {
-	*tv = NUM2INT(type);
-    }
+    *dv = family_arg(domain);
+    *tv = socktype_arg(type);
 }
 
 static VALUE
@@ -3137,17 +3160,17 @@
 static VALUE
 sock_s_gethostbyaddr(int argc, VALUE *argv)
 {
-    VALUE addr, type;
+    VALUE addr, family;
     struct hostent *h;
     struct sockaddr *sa;
     char **pch;
     VALUE ary, names;
     int t = AF_INET;
 
-    rb_scan_args(argc, argv, "11", &addr, &type);
+    rb_scan_args(argc, argv, "11", &addr, &family);
     sa = (struct sockaddr*)StringValuePtr(addr);
-    if (!NIL_P(type)) {
-	t = NUM2INT(type);
+    if (!NIL_P(family)) {
+	t = family_arg(family);
     }
 #ifdef INET6
     else if (RSTRING_LEN(addr) == 16) {
@@ -3239,24 +3262,12 @@
 sock_s_getaddrinfo(int argc, VALUE *argv)
 {
     VALUE host, port, family, socktype, protocol, flags, ret;
-    char *ap;
     struct addrinfo hints, *res;
 
     rb_scan_args(argc, argv, "24", &host, &port, &family, &socktype, &protocol, &flags);
 
     MEMZERO(&hints, struct addrinfo, 1);
-    if (NIL_P(family)) {
-	hints.ai_family = PF_UNSPEC;
-    }
-    else if (FIXNUM_P(family)) {
-	hints.ai_family = FIX2INT(family);
-    }
-    else if ((ap = StringValuePtr(family)) != 0) {
-        int af;
-        if (family_to_int(ap, RSTRING_LEN(family), &af) == -1)
-	    rb_raise(rb_eSocket, "unknown socket domain %s", ap);
-        hints.ai_family = af;
-    }
+    hints.ai_family = NIL_P(family) ? PF_UNSPEC : family_arg(family);
 
     if (!NIL_P(socktype)) {
 	hints.ai_socktype = NUM2INT(socktype);
@@ -3285,7 +3296,6 @@
     int error;
     struct sockaddr_storage ss;
     struct sockaddr *sap;
-    char *ap;
 
     sa = flags = Qnil;
     rb_scan_args(argc, argv, "11", &sa, &flags);
@@ -3362,18 +3372,7 @@
 	}
 	hints.ai_socktype = (fl & NI_DGRAM) ? SOCK_DGRAM : SOCK_STREAM;
 	/* af */
-	if (NIL_P(af)) {
-	    hints.ai_family = PF_UNSPEC;
-	}
-	else if (FIXNUM_P(af)) {
-	    hints.ai_family = FIX2INT(af);
-	}
-	else if ((ap = StringValuePtr(af)) != 0) {
-            int family;
-            if (family_to_int(ap, RSTRING_LEN(af), &family) == -1)
-                rb_raise(rb_eSocket, "unknown socket domain %s", ap);
-            hints.ai_family = family;
-	}
+        hints.ai_family = NIL_P(af) ? PF_UNSPEC : family_arg(af);
 	error = getaddrinfo(hptr, pptr, &hints, &res);
 	if (error) goto error_exit_addr;
 	sap = res->ai_addr;
Index: test/socket/test_udp.rb
===================================================================
--- test/socket/test_udp.rb	(revision 21253)
+++ test/socket/test_udp.rb	(revision 21254)
@@ -6,6 +6,15 @@
 
 
 class TestUDPSocket < Test::Unit::TestCase
+  def test_open
+    assert_nothing_raised { UDPSocket.open {} }
+    assert_nothing_raised { UDPSocket.open(Socket::AF_INET) {} }
+    assert_nothing_raised { UDPSocket.open("AF_INET") {} }
+    if defined? Socket::AF_INET6
+      assert_nothing_raised { UDPSocket.open(Socket::AF_INET6) {} }
+    end
+  end
+
   def test_connect
     s = UDPSocket.new
     host = Object.new

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

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