summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2001-07-11 22:31:15 +0000
committerSteve Huston <shuston@riverace.com>2001-07-11 22:31:15 +0000
commit64499cff7596ed7223379c0c470deba8e543b4db (patch)
tree99946367e16d7643a927ec4d74329009e55768a3
parentd9b4adb18d862f77ae2b9222626344b08c5f01db (diff)
downloadATCD-64499cff7596ed7223379c0c470deba8e543b4db.tar.gz
In get_ip_address, also allow V4COMPAT address to extract the IPv4 address.
-rw-r--r--ace/INET_Addr.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/ace/INET_Addr.cpp b/ace/INET_Addr.cpp
index 56f0325a32e..dbed0681bb6 100644
--- a/ace/INET_Addr.cpp
+++ b/ace/INET_Addr.cpp
@@ -760,18 +760,23 @@ ACE_INET_Addr::get_ip_address (void) const
{
ACE_TRACE ("ACE_INET_Addr::get_ip_address");
#if defined (ACE_HAS_IPV6)
- if(IN6_IS_ADDR_V4MAPPED(&this->inet_addr_.sin6_addr)) {
- ACE_UINT32 addr;
- // Return the last 32 bits of the address
- char *thisaddrptr = (char*)this->addr_pointer();
- thisaddrptr += 128/8 - 32/8;
- memcpy((void*)&addr,(void*)(thisaddrptr),sizeof(addr));
- return ntohl(addr);
- } else {
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("ACE_INET_Addr::get_ip_address: address is a IPv6 address not IPv4\n")));
- return 0;
- }
+ if(IN6_IS_ADDR_V4MAPPED (&this->inet_addr_.sin6_addr) ||
+ IN6_IS_ADDR_V4COMPAT (&this->inet_addr_.sin6_addr) )
+ {
+ ACE_UINT32 addr;
+ // Return the last 32 bits of the address
+ char *thisaddrptr = (char*)this->addr_pointer ();
+ thisaddrptr += 128/8 - 32/8;
+ memcpy ((void*)&addr, (void*)(thisaddrptr), sizeof(addr));
+ return ntohl (addr);
+ }
+ else
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("ACE_INET_Addr::get_ip_address: address is a IPv6 address not IPv4\n")));
+ errno = EAFNOSUPPORT;
+ return 0;
+ }
#else
return ntohl (ACE_UINT32 (this->inet_addr_.sin_addr.s_addr));
#endif