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

ruby-changes:9849

From: akr <ko1@a...>
Date: Thu, 8 Jan 2009 23:21:21 +0900 (JST)
Subject: [ruby-changes:9849] Ruby:r21390 (trunk): * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.

akr	2009-01-08 23:20:47 +0900 (Thu, 08 Jan 2009)

  New Revision: 21390

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

  Log:
    * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
      (shutdown_how_arg): new function.
    * ext/socket/mkconstants.rb: generate shutdown_how_to_int.

  Modified files:
    trunk/ChangeLog
    trunk/NEWS
    trunk/ext/socket/mkconstants.rb
    trunk/ext/socket/socket.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21389)
+++ ChangeLog	(revision 21390)
@@ -1,3 +1,10 @@
+Thu Jan  8 23:19:38 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
+	  (shutdown_how_arg): new function.
+
+	* ext/socket/mkconstants.rb: generate shutdown_how_to_int.
+
 Thu Jan  8 22:59:30 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/mkconstants.rb (gen_name_to_int_func): generate
Index: ext/socket/mkconstants.rb
===================================================================
--- ext/socket/mkconstants.rb	(revision 21389)
+++ ext/socket/mkconstants.rb	(revision 21390)
@@ -219,6 +219,7 @@
 <%= gen_name_to_int_func("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") %>
 <%= gen_name_to_int_func("tcp_optname_to_int", /\ATCP_/, "TCP_") %>
 <%= gen_name_to_int_func("udp_optname_to_int", /\AUDP_/, "UDP_") %>
+<%= gen_name_to_int_func("shutdown_how_to_int", /\ASHUT_/, "SHUT_") %>
 
 <%= INTERN_DEFS.map {|decl, gen_hash, func| func }.join("\n") %>
 
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 21389)
+++ ext/socket/socket.c	(revision 21390)
@@ -375,6 +375,13 @@
     }
 }
 
+static int
+shutdown_how_arg(VALUE how)
+{
+    /* convert SHUT_RD, SHUT_WR, SHUT_RDWR. */
+    return constant_arg(how, shutdown_how_to_int, "unknown shutdown argument");
+}
+
 static VALUE
 init_sock(VALUE sock, int fd)
 {
@@ -415,11 +422,11 @@
     }
     rb_scan_args(argc, argv, "01", &howto);
     if (howto == Qnil)
-	how = 2;
+	how = SHUT_RDWR;
     else {
-	how = NUM2INT(howto);
-	if (how < 0 || 2 < how) {
-	    rb_raise(rb_eArgError, "`how' should be either 0, 1, 2");
+	how = shutdown_how_arg(howto);
+        if (how != SHUT_WR && how != SHUT_RD && how != SHUT_RDWR) {
+	    rb_raise(rb_eArgError, "`how' should be either :SHUT_RD, :SHUT_WR, :SHUT_RDWR");
 	}
     }
     GetOpenFile(sock, fptr);
Index: NEWS
===================================================================
--- NEWS	(revision 21389)
+++ NEWS	(revision 21390)
@@ -78,8 +78,9 @@
     returns a sender address as AddrInfo object instead of a string.
   * BasicSocket#local_address
   * BasicSocket#remote_address
-  * string/symbol as protocol/address family, socket type, protocol level and
-    socket option name can be specified as a string/symbol.
+  * string/symbol as protocol/address family, socket type, protocol level,
+    socket option name and shutdown's how argument can be specified as a
+    string/symbol.
 
 === Compatibility issues (excluding feature bug fixes)
 

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

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