1ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton//===-- SocketAddress.h -----------------------------------------*- 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#ifndef liblldb_SocketAddress_h_ 11ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#define liblldb_SocketAddress_h_ 12ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 13ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// C Includes 14ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include <stdint.h> 15ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include <sys/socket.h> 16ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include <netdb.h> 17ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#include <netinet/in.h> 18ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 194b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#if defined(__FreeBSD__) 204b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#include <sys/types.h> 214b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#endif 224b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen 23ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// C++ Includes 24ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// Other libraries and framework includes 25ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton// Project includes 26ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 27ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonnamespace lldb_private { 28ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 29ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonclass SocketAddress 30ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton{ 31ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonpublic: 32ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 33ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton // Constructors and Destructors 34ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 35d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SocketAddress (); 36d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SocketAddress (const struct sockaddr &s); 37d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SocketAddress (const struct sockaddr_in &s); 38d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SocketAddress (const struct sockaddr_in6 &s); 39d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SocketAddress (const struct sockaddr_storage &s); 40d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SocketAddress (const SocketAddress& rhs); 41d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton ~SocketAddress (); 42ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 43ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 44ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton // Operators 45ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 46ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton const SocketAddress& 47ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator=(const SocketAddress& rhs); 48ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 49ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton const SocketAddress& 50ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator=(const struct addrinfo *addr_info); 51ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 52d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const SocketAddress& 53d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton operator=(const struct sockaddr &s); 54d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 55d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const SocketAddress& 56d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton operator=(const struct sockaddr_in &s); 57d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 58d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const SocketAddress& 59d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton operator=(const struct sockaddr_in6 &s); 60d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 61d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const SocketAddress& 62d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton operator=(const struct sockaddr_storage &s); 63d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 64d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 65d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Clear the contents of this socket address 66d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 67ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton void 68ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton Clear (); 69ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 70d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 71d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Get the length for the current socket address family 72d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 73ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton socklen_t 74ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton GetLength () const; 75ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 76d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 77d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Get the mex length for the the largest socket address supported. 78d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 79ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton static socklen_t 80ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton GetMaxLength (); 81ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 82d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 83d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Get the socket address family 84d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 85ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sa_family_t 86ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton GetFamily () const; 87ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 88d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 89d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Set the socket address family 90d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 91ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton void 92ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton SetFamily (sa_family_t family); 93ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 94d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 95d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Get the port if the socket address for the family has a port 96d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 97ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton in_port_t 98ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton GetPort () const; 99ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 100d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 101d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Set the port if the socket address for the family has a port. 102d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // The family must be set correctly prior to calling this function. 103d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 104d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton bool 105d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SetPort (in_port_t port); 106d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 107d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 108d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Set the socket address according to the first match from a call 109d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // to getaddrinfo() (or equivalent functions for systems that don't 110d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // have getaddrinfo(). If "addr_info_ptr" is not NULL, it will get 111d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // filled in with the match that was used to populate this socket 112d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // address. 113d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 114d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton bool 115d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SetAddress (const struct addrinfo *hints_ptr, // Optional hints where the family, protocol and other things can be specified. 116d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const char *host, // Hostname ("foo.bar.com" or "foo" or IP address string ("123.234.12.1" or "2001:0db8:85a3:0000:0000:8a2e:0370:7334") 117d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton const char *service, // Protocol name ("tcp", "http", etc) or a raw port number string ("81") 118d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton struct addrinfo *addr_info_ptr); // If non-NULL, this will get filled in with the match 119d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 120d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 121d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Quick way to set the SocketAddress to localhost given the family. 122d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Returns true if successful, false if "family" doesn't support 123d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // localhost or if "family" is not supported by this class. 124d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 125d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton bool 126d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton SetToLocalhost (sa_family_t family, 127d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton in_port_t port); 128d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 129d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 130d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Returns true if there is a valid socket address in this object. 131d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 132ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton bool 133ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton IsValid () const; 134ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 135d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 136d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // Direct access to all of the sockaddr structures 137d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton //------------------------------------------------------------------ 138ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr & 139ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr () 140ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 141ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa; 142ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 143ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 144ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton const struct sockaddr & 145ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr () const 146ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 147ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa; 148ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 149ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 150ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr_in & 151ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_in () 152ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 153ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa_ipv4; 154ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 155ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 156ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton const struct sockaddr_in & 157ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_in () const 158ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 159ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa_ipv4; 160ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 161ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 162ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr_in6 & 163ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_in6 () 164ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 165ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa_ipv6; 166ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 167ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 168ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton const struct sockaddr_in6 & 169ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_in6 () const 170ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 171ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa_ipv6; 172ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 173ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 174ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr_storage & 175ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_storage () 176ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 177ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa_storage; 178ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 179ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 180ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 181ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton const struct sockaddr_storage & 182ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_storage () const 183ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 184ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return m_socket_addr.sa_storage; 185ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 186d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 187d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 188ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 189ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton // Conversion operators to allow getting the contents of this class 190d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // as a pointer to the appropriate structure. This allows an instance 191d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // of this class to be used in calls that take one of the sockaddr 192d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // structure variants without having to manally use the correct 193d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton // accessor function. 194ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 195ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 196ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator struct sockaddr * () 197ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 198ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa; 199ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 200ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 201ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator const struct sockaddr * () const 202ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 203ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa; 204ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 205ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 206ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator struct sockaddr_in * () 207ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 208ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa_ipv4; 209ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 210ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 211ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator const struct sockaddr_in * () const 212ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 213ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa_ipv4; 214ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 215ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 216ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator struct sockaddr_in6 * () 217ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 218ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa_ipv6; 219ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 220ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 221ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator const struct sockaddr_in6 * () const 222ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 223ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa_ipv6; 224ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 225ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 226ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator const struct sockaddr_storage * () const 227ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 228ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa_storage; 229ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 230ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 231ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton operator struct sockaddr_storage * () 232ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 233ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton return &m_socket_addr.sa_storage; 234ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } 235ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 236d5b3e3c662c967feb455a01f307c3f4bc318eec9Greg Clayton 237ac304e4cbd1005210661720d5f2232f85b08c195Greg Claytonprotected: 238ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton typedef union sockaddr_tag 239ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton { 240ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr sa; 241ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr_in sa_ipv4; 242ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr_in6 sa_ipv6; 243ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton struct sockaddr_storage sa_storage; 244ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton } sockaddr_t; 245ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 246ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 247ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton // Classes that inherit from SocketAddress can see and modify these 248ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton //------------------------------------------------------------------ 249ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton sockaddr_t m_socket_addr; 250ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton}; 251ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 252ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 253ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton} // namespace lldb_private 254ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 255ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton 256ac304e4cbd1005210661720d5f2232f85b08c195Greg Clayton#endif // liblldb_SocketAddress_h_ 257