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

ruby-changes:40843

From: normal <ko1@a...>
Date: Tue, 8 Dec 2015 03:40:02 +0900 (JST)
Subject: [ruby-changes:40843] normal:r52922 (trunk): socket: expand docs+tests for recv_io/send_io

normal	2015-12-08 03:39:47 +0900 (Tue, 08 Dec 2015)

  New Revision: 52922

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

  Log:
    socket: expand docs+tests for recv_io/send_io
    
    * ext/socket/unixsocket.c (unix_send_io): document args
      (unix_recv_io): ditto
    * test/socket/test_unix.rb (test_fd_passing_class_mode): added
    
    I was working on these when I encountered the problem in
    with BasicSocket.for_fd not handling mode args:
    https://bugs.ruby-lang.org/issues/11778

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/unixsocket.c
    trunk/test/socket/test_unix.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52921)
+++ ChangeLog	(revision 52922)
@@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Tue Dec  8 03:30:34 2015  Eric Wong  <e@8...>
+
+	* ext/socket/unixsocket.c (unix_send_io): document args
+	  (unix_recv_io): ditto
+	* test/socket/test_unix.rb (test_fd_passing_class_mode): added
+
 Tue Dec 08 02:21:35 2015  Koichi Sasada  <ko1@a...>
 
 	* iseq.c (iseq_translate): at the end of constructing an iseq,
Index: ext/socket/unixsocket.c
===================================================================
--- ext/socket/unixsocket.c	(revision 52921)
+++ ext/socket/unixsocket.c	(revision 52922)
@@ -201,6 +201,8 @@ sendmsg_blocking(void *data) https://github.com/ruby/ruby/blob/trunk/ext/socket/unixsocket.c#L201
  *   p stdout.fileno #=> 6
  *
  *   stdout.puts "hello" # outputs "hello\n" to standard output.
+ *
+ * _io_ may be any kind of IO object or integer file descriptor.
  */
 static VALUE
 unix_send_io(VALUE sock, VALUE val)
@@ -297,6 +299,11 @@ recvmsg_blocking(void *data) https://github.com/ruby/ruby/blob/trunk/ext/socket/unixsocket.c#L299
  *     }
  *   }
  *
+ * _klass_ will determine the class of _io_ returned (using the
+ * IO.for_fd singleton method or similar).
+ * If _klass_ is +nil+, an integer file descriptor is returned.
+ *
+ * _mode_ is the same as the argument passed to IO.for_fd
  */
 static VALUE
 unix_recv_io(int argc, VALUE *argv, VALUE sock)
Index: test/socket/test_unix.rb
===================================================================
--- test/socket/test_unix.rb	(revision 52921)
+++ test/socket/test_unix.rb	(revision 52922)
@@ -37,6 +37,26 @@ class TestSocket_UNIXSocket < Test::Unit https://github.com/ruby/ruby/blob/trunk/test/socket/test_unix.rb#L37
     end
   end
 
+  def test_fd_passing_class_mode
+    UNIXSocket.pair do |s1, s2|
+      s1.send_io(s1.fileno)
+      r = s2.recv_io(nil)
+      assert_kind_of Integer, r, 'recv_io with klass=nil returns integer FD'
+      assert_not_equal s1.fileno, r
+      r = IO.for_fd(r)
+      assert_equal s1.stat.ino, r.stat.ino
+      r.close
+
+      s1.send_io(s1)
+      # klass = UNIXSocket FIXME: [ruby-core:71860] [Bug #11778]
+      klass = IO
+      r = s2.recv_io(klass, 'r+')
+      assert_instance_of klass, r, 'recv_io with proper klass'
+      assert_not_equal s1.fileno, r.fileno
+      r.close
+    end
+  end
+
   def test_fd_passing_n
     io_ary = []
     return if !defined?(Socket::SCM_RIGHTS)

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

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