diff options
author | Steve Huston <shuston@riverace.com> | 1998-05-21 04:01:17 +0000 |
---|---|---|
committer | Steve Huston <shuston@riverace.com> | 1998-05-21 04:01:17 +0000 |
commit | 86ffea8291b7773bbde4336fc10cf333c1f58154 (patch) | |
tree | 51317c375959831df9c66b5ff58480d2cdd10b68 | |
parent | 5fa20cb58855b0901a32adecc31acdbb708e03f0 (diff) | |
download | ATCD-86ffea8291b7773bbde4336fc10cf333c1f58154.tar.gz |
Trying to work around ACE::get_ip_interfaces problems on Win32 with dynamic
address assignment.
-rw-r--r-- | ace/SOCK_Dgram_Mcast.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/ace/SOCK_Dgram_Mcast.cpp b/ace/SOCK_Dgram_Mcast.cpp index 43bd7cb4320..2601e6b0808 100644 --- a/ace/SOCK_Dgram_Mcast.cpp +++ b/ace/SOCK_Dgram_Mcast.cpp @@ -87,24 +87,34 @@ ACE_SOCK_Dgram_Mcast::subscribe (const ACE_INET_Addr &mcast_addr, if (net_if == 0) { - ACE_INET_Addr *if_addrs; + ACE_INET_Addr *if_addrs = 0; size_t if_cnt, nr_subscribed; if (ACE::get_ip_interfaces(if_cnt, if_addrs) != 0) return -1; - for (nr_subscribed = 0; if_cnt > 0; ) + if (if_cnt < 2) { - --if_cnt; // Convert to 0-based for indexing, and next loop check - if (if_addrs[if_cnt].get_ip_address() == INADDR_LOOPBACK) - continue; if (this->subscribe(mcast_addr, reuse_addr, - ASYS_WIDE_STRING (if_addrs[if_cnt].get_host_addr()), + ASYS_WIDE_STRING ("0.0.0.0"), protocol_family, protocol) == 0) ++nr_subscribed; } + else + for (nr_subscribed = 0; if_cnt > 0; ) + { + --if_cnt; // Convert to 0-based for indexing, next loop check + if (if_addrs[if_cnt].get_ip_address() == INADDR_LOOPBACK) + continue; + if (this->subscribe(mcast_addr, + reuse_addr, + ASYS_WIDE_STRING (if_addrs[if_cnt].get_host_addr()), + protocol_family, + protocol) == 0) + ++nr_subscribed; + } delete [] if_addrs; |