diff options
author | Steve Huston <shuston@riverace.com> | 2017-03-31 17:15:20 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-31 17:15:20 -0400 |
commit | b48973b3dead89edc84a52dd44c72da3bdbc058a (patch) | |
tree | d46b44e9b2ce365626eec7d9fa0ebb3a293027bf | |
parent | a65d9ccf57ff9ba922285c66468b53421b93ab9a (diff) | |
parent | 30998b2627c5694749bcfb5ff4dceb2d413c7ac1 (diff) | |
download | ATCD-b48973b3dead89edc84a52dd44c72da3bdbc058a.tar.gz |
Merge pull request #384 from DOCGroup/case2063
Fix ability to request IPv4 address from ACE_INET_Addr::set
-rw-r--r-- | ACE/ace/INET_Addr.cpp | 3 | ||||
-rw-r--r-- | ACE/tests/INET_Addr_Test_IPV6.cpp | 55 |
2 files changed, 57 insertions, 1 deletions
diff --git a/ACE/ace/INET_Addr.cpp b/ACE/ace/INET_Addr.cpp index a9b3649142d..5d63d19880f 100644 --- a/ACE/ace/INET_Addr.cpp +++ b/ACE/ace/INET_Addr.cpp @@ -510,6 +510,9 @@ ACE_INET_Addr::set (const char port_name[], } int address_family = PF_UNSPEC; + if (ACE_OS::strcmp(protocol, "tcp") == 0) + address_family = AF_INET; + # if defined (ACE_HAS_IPV6) if (ACE_OS::strcmp (protocol, "tcp6") == 0) address_family = AF_INET6; diff --git a/ACE/tests/INET_Addr_Test_IPV6.cpp b/ACE/tests/INET_Addr_Test_IPV6.cpp index d9409bed5e8..e0522c126c1 100644 --- a/ACE/tests/INET_Addr_Test_IPV6.cpp +++ b/ACE/tests/INET_Addr_Test_IPV6.cpp @@ -22,7 +22,7 @@ // Make sure that ACE_Addr::addr_type_ is the same // as the family of the inet_addr_. -int check_type_consistency (const ACE_INET_Addr &addr) +static int check_type_consistency (const ACE_INET_Addr &addr) { int family = -1; @@ -51,6 +51,56 @@ int check_type_consistency (const ACE_INET_Addr &addr) return 0; } +// A test to ensure ACE_INET_Addr can select the protocol family. +static bool check_both_families() +{ + bool good = true; + ACE_INET_Addr a; + if (-1 == a.set(ACE_TEXT (""), ACE_TEXT ("www.google.com"), ACE_TEXT ("tcp"))) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("both test 4, www.google.com"))); + good = false; + } + else + { + ACE_TCHAR str[1000]; + a.addr_to_string (str, 1000, 1); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("got type %d, addr %s\n"), a.get_type(), str)); + // Should have selected IPv4. + if (a.get_type() != AF_INET) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Wrong address family, expecting IPv4\n"))); + good = false; + } + } + + ACE_INET_Addr b; + if (-1 == b.set(ACE_TEXT(""), ACE_TEXT("www.google.com"), ACE_TEXT("tcp6"))) + { + ACE_ERROR((LM_ERROR, + ACE_TEXT("%p\n"), + ACE_TEXT("both test 6, www.google.com"))); + good = false; + } + else + { + ACE_TCHAR str[1000]; + b.addr_to_string(str, 1000, 1); + ACE_DEBUG((LM_DEBUG, ACE_TEXT("got type %d, addr %s\n"), b.get_type(), str)); + // Should have selected IPv6. + if (b.get_type() != AF_INET6) + { + ACE_ERROR((LM_ERROR, + ACE_TEXT("Wrong address family, expecting IPv6\n"))); + good = false; + } + } + return good; +} + int run_main (int, ACE_TCHAR *[]) { @@ -154,6 +204,9 @@ int run_main (int, ACE_TCHAR *[]) #endif /* ACE_LINUX */ } + if (!check_both_families()) + status = 1; + #endif /* ACE_HAS_IPV6 */ ACE_END_TEST; |