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/