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

ruby-changes:12473

From: usa <ko1@a...>
Date: Fri, 17 Jul 2009 22:41:17 +0900 (JST)
Subject: [ruby-changes:12473] Ruby:r24173 (trunk): * ext/socket/socket.c (socket_s_ip_address_list): drop inactive

usa	2009-07-17 22:40:59 +0900 (Fri, 17 Jul 2009)

  New Revision: 24173

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

  Log:
    * ext/socket/socket.c (socket_s_ip_address_list): drop inactive
      adapters.
    * test/socket/test_{nonblock,addrinfo,socket}.rb: skip some tests on
      Windows.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/socket.c
    trunk/test/socket/test_addrinfo.rb
    trunk/test/socket/test_nonblock.rb
    trunk/test/socket/test_socket.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24172)
+++ ChangeLog	(revision 24173)
@@ -1,3 +1,12 @@
+Fri Jul 17 22:37:22 2009  NAKAMURA Usaku  <usa@r...>
+
+	* ext/socket/socket.c (socket_s_ip_address_list): drop inactive
+	  adapters.
+
+	* test/socket/test_{nonblock,addrinfo,socket}.rb: skip some tests on
+	  Windows.
+	  [ruby-core:23051]
+
 Fri Jul 17 22:29:21 2009  NAKAMURA Usaku  <usa@r...>
 
 	* ext/readline/readline.c (Init_readline): use rl_catch_sigwinch only
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 24172)
+++ ext/socket/socket.c	(revision 24173)
@@ -1693,7 +1693,7 @@
 	DWORD dummy9;
 	DWORD dummy10;
 	DWORD IfType;
-	int dummy11;
+	int OperStatus;
 	DWORD dummy12;
 	DWORD dummy13[16];
 	void *dummy14;
@@ -1733,12 +1733,22 @@
     for (; adapters; adapters = adapters->Next) {
 	ip_adapter_unicast_address_t *uni;
 	ip_adapter_anycast_address_t *any;
+	if (adapters->OperStatus != 1)	/* 1 means IfOperStatusUp */
+	    continue;
 	for (uni = adapters->FirstUnicastAddress; uni; uni = uni->Next) {
+#ifndef INET6
+	    if (uni->Address.lpSockaddr->sa_family == AF_INET)
+#else
 	    if (IS_IP_FAMILY(uni->Address.lpSockaddr->sa_family))
+#endif
 		rb_ary_push(list, sockaddr_obj(uni->Address.lpSockaddr));
 	}
 	for (any = adapters->FirstAnycastAddress; any; any = any->Next) {
+#ifndef INET6
+	    if (any->Address.lpSockaddr->sa_family == AF_INET)
+#else
 	    if (IS_IP_FAMILY(any->Address.lpSockaddr->sa_family))
+#endif
 		rb_ary_push(list, sockaddr_obj(any->Address.lpSockaddr));
 	}
     }
Index: test/socket/test_nonblock.rb
===================================================================
--- test/socket/test_nonblock.rb	(revision 24172)
+++ test/socket/test_nonblock.rb	(revision 24173)
@@ -196,6 +196,8 @@
         loop {
           c.sendmsg_nonblock("a" * 100000)
         }
+      rescue NotImplementedError
+        skip "sendmsg not implemented on this platform."
       rescue Errno::EWOULDBLOCK
         assert_kind_of(IO::WaitWritable, $!)
       end
@@ -206,6 +208,8 @@
     tcp_pair {|c, s|
       begin
         c.recvmsg_nonblock(4096)
+      rescue NotImplementedError
+        skip "sendmsg not implemented on this platform."
       rescue Errno::EWOULDBLOCK
         assert_kind_of(IO::WaitReadable, $!)
       end
Index: test/socket/test_addrinfo.rb
===================================================================
--- test/socket/test_addrinfo.rb	(revision 24172)
+++ test/socket/test_addrinfo.rb	(revision 24173)
@@ -317,6 +317,7 @@
     ai = Addrinfo.tcp("0.0.0.0", 4649).family_addrinfo("127.0.0.1", 80)
     assert_equal(["127.0.0.1", 80], ai.ip_unpack)
     assert_equal(Socket::SOCK_STREAM, ai.socktype)
+    return unless Addrinfo.respond_to?(:unix)
     ai = Addrinfo.unix("/testdir/sock").family_addrinfo("/testdir/sock2")
     assert_equal("/testdir/sock2", ai.unix_path)
     assert_equal(Socket::SOCK_STREAM, ai.socktype)
Index: test/socket/test_socket.rb
===================================================================
--- test/socket/test_socket.rb	(revision 24172)
+++ test/socket/test_socket.rb	(revision 24173)
@@ -36,19 +36,22 @@
 
   def test_initialize
     Socket.open(Socket::AF_INET, Socket::SOCK_STREAM, 0) {|s|
+      s.bind(Socket.sockaddr_in(0, "127.0.0.1"))
       addr = s.getsockname
       assert_nothing_raised { Socket.unpack_sockaddr_in(addr) }
-      assert_raise(ArgumentError) { Socket.unpack_sockaddr_un(addr) }
+      assert_raise(ArgumentError, NoMethodError) { Socket.unpack_sockaddr_un(addr) }
     }
     Socket.open("AF_INET", "SOCK_STREAM", 0) {|s|
+      s.bind(Socket.sockaddr_in(0, "127.0.0.1"))
       addr = s.getsockname
       assert_nothing_raised { Socket.unpack_sockaddr_in(addr) }
-      assert_raise(ArgumentError) { Socket.unpack_sockaddr_un(addr) }
+      assert_raise(ArgumentError, NoMethodError) { Socket.unpack_sockaddr_un(addr) }
     }
     Socket.open(:AF_INET, :SOCK_STREAM, 0) {|s|
+      s.bind(Socket.sockaddr_in(0, "127.0.0.1"))
       addr = s.getsockname
       assert_nothing_raised { Socket.unpack_sockaddr_in(addr) }
-      assert_raise(ArgumentError) { Socket.unpack_sockaddr_un(addr) }
+      assert_raise(ArgumentError, NoMethodError) { Socket.unpack_sockaddr_un(addr) }
     }
   end
 
@@ -254,10 +257,11 @@
     begin
       ip_addrs = Socket.ip_address_list
     rescue NotImplementedError
-      return
+      skip "Socket.ip_address_list not implemented"
     end
 
     Socket.udp_server_sockets(0) {|sockets|
+      skip "need sendmsg and recvmsg" unless sockets.respond_to?(:sendmsg)
       famlies = {}
       sockets.each {|s| famlies[s.local_address.afamily] = true }
       ip_addrs.reject! {|ai| !famlies[ai.afamily] }

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

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