From 36a913e51ee24aae22bd6ca1f6e3dc680ba87177 Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 18 Feb 2009 18:43:15 +0000 Subject: * ext/socket/ancdata.c (ancillary_rights): new method. (make_io_for_rights): new function to allocate IOs for FDs in SCM_RIGHTS message. (bsock_recvmsg_internal): use make_io_for_rights. So the FDs can be closed by GC. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22426 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/socket/test_unix.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'test/socket') diff --git a/test/socket/test_unix.rb b/test/socket/test_unix.rb index 6e822dbc3..e4c86f291 100644 --- a/test/socket/test_unix.rb +++ b/test/socket/test_unix.rb @@ -53,7 +53,7 @@ class TestSocket_UNIXSocket < Test::Unit::TestCase recv_io_ary = [] ctls.each {|ctl| next if ctl.level != Socket::SOL_SOCKET || ctl.type != Socket::SCM_RIGHTS - recv_io_ary.concat ctl.data.unpack("i!*").map {|fd| IO.new(fd) } + recv_io_ary.concat ctl.rights } assert_equal(send_io_ary.length, recv_io_ary.length) send_io_ary.length.times {|i| @@ -126,13 +126,14 @@ class TestSocket_UNIXSocket < Test::Unit::TestCase assert_instance_of(Addrinfo, srcaddr) assert_instance_of(Array, ctls) assert_equal(1, ctls.length) - assert_instance_of(Socket::AncillaryData, ctls[0]) - assert_equal(Socket::SOL_SOCKET, ctls[0].level) - assert_equal(Socket::SCM_RIGHTS, ctls[0].type) - assert_instance_of(String, ctls[0].data) - fd, rest = ctls[0].data.unpack("i!a*") - assert_equal("", rest) - r2 = IO.new(fd) + ctl = ctls[0] + assert_instance_of(Socket::AncillaryData, ctl) + assert_equal(Socket::SOL_SOCKET, ctl.level) + assert_equal(Socket::SCM_RIGHTS, ctl.type) + assert_instance_of(String, ctl.data) + ios = ctl.rights + assert_equal(1, ios.length) + r2 = ios[0] begin assert(File.identical?(r1, r2)) ensure -- cgit