1ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//===-- SocketAddress.cpp ---------------------------------------*- C++ -*-===// 2ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// 3ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// The LLVM Compiler Infrastructure 4ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// 5ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// This file is distributed under the University of Illinois Open Source 6ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// License. See LICENSE.TXT for details. 7ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// 8ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//===----------------------------------------------------------------------===// 9ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 10ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include "lldb/Host/SocketAddress.h" 11ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include <stddef.h> 12ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 13ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// C Includes 14ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne#include <assert.h> 15ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include <string.h> 16ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 17ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// C++ Includes 18ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// Other libraries and framework includes 19ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// Project includes 20ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 21ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonusing namespace lldb_private; 22ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 23ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 24ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// SocketAddress constructor 25ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 26d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SocketAddress () 27ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 28ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton Clear (); 29ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 30ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 31d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SocketAddress (const struct sockaddr &s) 32d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 33d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa = s; 34d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 35d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 36d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 37d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SocketAddress (const struct sockaddr_in &s) 38d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 39d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv4 = s; 40d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 41d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 42d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 43d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SocketAddress (const struct sockaddr_in6 &s) 44d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 45d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv6 = s; 46d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 47d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 48d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 49d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SocketAddress (const struct sockaddr_storage &s) 50d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 51d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_storage = s; 52d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 53d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 54ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 55ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// SocketAddress copy constructor 56ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 57ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::SocketAddress (const SocketAddress& rhs) : 58ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton m_socket_addr (rhs.m_socket_addr) 59ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 60ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 61ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 62ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 63ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// Destructor 64ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 65ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::~SocketAddress() 66ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 67ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 68ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 69ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonvoid 70ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::Clear () 71ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 72ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton memset (&m_socket_addr, 0, sizeof(m_socket_addr)); 73ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 74ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 75ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonbool 76ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::IsValid () const 77ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 78ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return GetLength () != 0; 79ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 80ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 81ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbournestatic socklen_t 82ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter CollingbourneGetFamilyLength (sa_family_t family) 83ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne{ 84ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne switch (family) 85ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne { 86ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne case AF_INET: return sizeof(struct sockaddr_in); 87ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne case AF_INET6: return sizeof(struct sockaddr_in6); 88ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne } 89ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne assert(0 && "Unsupported address family"); 90ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne} 91ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne 92ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonsocklen_t 93ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::GetLength () const 94ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 95ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne#if defined(__APPLE__) 96ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa.sa_len; 97ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne#else 98ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne return GetFamilyLength (GetFamily()); 99ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne#endif 100ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 101ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 102ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonsocklen_t 103ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::GetMaxLength () 104ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 105ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return sizeof (sockaddr_t); 106ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 107ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 108ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonsa_family_t 109ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::GetFamily () const 110ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 111ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa.sa_family; 112ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 113ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 114ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonvoid 115ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::SetFamily (sa_family_t family) 116ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 117ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton m_socket_addr.sa.sa_family = family; 118ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne#if defined(__APPLE__) 119ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne m_socket_addr.sa.sa_len = GetFamilyLength (family); 120ea6d783624f0b7dcbf3773cb31d6e4fcd4f93b6cPeter Collingbourne#endif 121ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 122ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 123ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonin_port_t 124ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::GetPort () const 125ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 126ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton switch (GetFamily()) 127ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 128ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton case AF_INET: return m_socket_addr.sa_ipv4.sin_port; 129ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton case AF_INET6: return m_socket_addr.sa_ipv6.sin6_port; 130ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 131ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return 0; 132ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 133ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 134d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonbool 135d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SetPort (in_port_t port) 136d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 137d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton switch (GetFamily()) 138d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton { 139d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton case AF_INET: 140d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv4.sin_port = htons(port); 141d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return true; 142d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 143d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton case AF_INET6: 144d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv6.sin6_port = htons(port); 145d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return true; 146d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton } 147d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return false; 148d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 149d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 150ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 151ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// SocketAddress assignment operator 152ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//---------------------------------------------------------------------- 153ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonconst SocketAddress& 154ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::operator=(const SocketAddress& rhs) 155ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 156ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton if (this != &rhs) 157ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton m_socket_addr = rhs.m_socket_addr; 158ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return *this; 159ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 160ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 161ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonconst SocketAddress& 162ac304e4cbd1005210661720d5f2232f85b08c195Greg ClaytonSocketAddress::operator=(const struct addrinfo *addr_info) 163ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 164ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton Clear(); 165ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton if (addr_info && 166ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton addr_info->ai_addr && 167ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton addr_info->ai_addrlen > 0&& 168ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton addr_info->ai_addrlen <= sizeof m_socket_addr) 169ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 170ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton ::memcpy (&m_socket_addr, 171ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton addr_info->ai_addr, 172ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton addr_info->ai_addrlen); 173ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 174ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return *this; 175ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} 176ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 177d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonconst SocketAddress& 178d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::operator=(const struct sockaddr &s) 179d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 180d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa = s; 181d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return *this; 182d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 183d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 184d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonconst SocketAddress& 185d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::operator=(const struct sockaddr_in &s) 186d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 187d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv4 = s; 188d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return *this; 189d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 190d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 191d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonconst SocketAddress& 192d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::operator=(const struct sockaddr_in6 &s) 193d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 194d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv6 = s; 195d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return *this; 196d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 197d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 198d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonconst SocketAddress& 199d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::operator=(const struct sockaddr_storage &s) 200d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 201d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_storage = s; 202d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return *this; 203d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 204d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 205d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonbool 206d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SetAddress (const struct addrinfo *hints_ptr, 207d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const char *host, 208d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const char *service, 209d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton struct addrinfo *addr_info_ptr) 210d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 211d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton struct addrinfo *service_info_list = NULL; 212d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton int err = ::getaddrinfo (host, service, hints_ptr, &service_info_list); 213d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton if (err == 0 && service_info_list) 214d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton { 215d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton if (addr_info_ptr) 216d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton *addr_info_ptr = *service_info_list; 217d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton *this = service_info_list; 218d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton } 219d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton else 220d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton Clear(); 221d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 222d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton :: freeaddrinfo (service_info_list); 223d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 224d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const bool is_valid = IsValid(); 225d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton if (!is_valid) 226d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton { 227d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton if (addr_info_ptr) 228d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton ::memset (addr_info_ptr, 0, sizeof(struct addrinfo)); 229d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton } 230e1cffb10e1bdf9083a770b4fad204d0f32121e70Greg Clayton return is_valid; 231d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 232ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 233ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 234d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Claytonbool 235d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg ClaytonSocketAddress::SetToLocalhost (sa_family_t family, in_port_t port) 236d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton{ 237d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton switch (family) 238d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton { 239d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton case AF_INET: 240d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SetFamily (AF_INET); 241d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton if (SetPort (port)) 242d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton { 243d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv4.sin_addr.s_addr = htonl (INADDR_ANY); 244d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return true; 245d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton } 246d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton break; 247d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 248d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton case AF_INET6: 249d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SetFamily (AF_INET6); 250d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton if (SetPort (port)) 251d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton { 252d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton m_socket_addr.sa_ipv6.sin6_addr = in6addr_any; 253d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return true; 254d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton } 255d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton break; 256d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 257d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton } 258d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton Clear(); 259d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton return false; 260d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton} 261