summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-17 13:40:59 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-17 13:40:59 +0000
commit229b4e4c3773949987950c7fa5ed09868fcd094d (patch)
tree650e2ecd7e0e662ff6006284920c4d588d5a33d8 /ext
parent3d704802ddcd23c5396428d9bb96f96ae2de6e77 (diff)
* 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.c12
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));
}
}