== socketaddress.h == class SocketAddress { public: virtual bool isValid() = 0; virtual operator struct sockaddr *() = 0; virtual operator socklen_t() = 0; virtual ~SocketAddress() {} SocketAddress() {} }; == ipv4address.h == class IPv4Address : public SocketAddress { public: IPv4Address(char* addr, char* port); IPv4Address(uint32_t addr, uint16_t port); IPv4Address(char* port); IPv4Address(uint16_t port); IPv4Address(); ~IPv4Address(); operator struct sockaddr * (); operator socklen_t(); bool isValid(); private: struct sockaddr_in m_addr; }; == IPv4Address.cpp == #include "ipv4address.h" #include #include #include #include IPv4Address::IPv4Address(char* addr, char* port) { IPv4Address(inet_addr(addr),htons(atoi(port))); } IPv4Address::IPv4Address(char* port) { IPv4Address(htons(atoi(port))); } IPv4Address::IPv4Address(uint32_t addr, uint16_t port) : m_addr() { //memset(&m_addr, 0, sizeof(m_addr)); m_addr.sin_family = AF_INET; m_addr.sin_port = port; m_addr.sin_addr.s_addr = addr; std::cout << "m_addr.sin_family=" << m_addr.sin_family << " == " << AF_INET << "\n"; } IPv4Address::IPv4Address(uint16_t port) { IPv4Address(htonl(INADDR_ANY), port); } IPv4Address::IPv4Address() { IPv4Address(htonl(INADDR_ANY), 0); } IPv4Address::~IPv4Address() { } IPv4Address::operator socklen_t() { return sizeof(m_addr); } IPv4Address::operator struct sockaddr *() { return (struct sockaddr *)&m_addr; } bool IPv4Address::isValid() { std::cout << "IPv4Address::isValid() m_addr.sin_family == " << m_addr.sin_family << "\n"; return (m_addr.sin_family == AF_INET); }