diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-17 13:40:59 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-17 13:40:59 +0000 |
commit | 229b4e4c3773949987950c7fa5ed09868fcd094d (patch) | |
tree | 650e2ecd7e0e662ff6006284920c4d588d5a33d8 /ext | |
parent | 3d704802ddcd23c5396428d9bb96f96ae2de6e77 (diff) | |
download | ruby-229b4e4c3773949987950c7fa5ed09868fcd094d.tar.gz |
* ext/socket/socket.c (socket_s_ip_address_list): drop inactive
adapters.
* test/socket/test_{nonblock,addrinfo,socket}.rb: skip some tests on
Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24173 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/socket/socket.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c index d041293a68..a2e14b32d2 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -1693,7 +1693,7 @@ socket_s_ip_address_list(VALUE self) DWORD dummy9; DWORD dummy10; DWORD IfType; - int dummy11; + int OperStatus; DWORD dummy12; DWORD dummy13[16]; void *dummy14; @@ -1733,12 +1733,22 @@ socket_s_ip_address_list(VALUE self) 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)); } } |