== socketaddress.h == #include class SocketAddress { public: virtual bool isValid() = 0; virtual operator socklen_t() = 0; virtual struct sockaddr& getSockAddr() = 0; virtual ~SocketAddress() {} SocketAddress() {} }; == ipv4address.h == #include #include #include "socketaddress.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 socklen_t(); bool isValid(); struct sockaddr_in m_addr; struct sockaddr& getSockAddr(); }; == 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); } struct sockaddr& IPv4Address::getSockAddr() { 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); } == test_tcp_main.cpp == #include "netmanager.h" #include "ipv4address.h" #include "testtcpsocket.h" #include "listensocket.h" #include #include int main(int argc, char* argv[]) { NetManager* nm = NetManager::instance(); ListenSocket ls(*nm); IPv4Address any("9001"); std::cout << "any->sin_family == " << any.m_addr.sin_family << "\n"; int ret; ret = ls.bind(any); std::cout << "bind returned " << ret << "\n"; ret = ls.listen(1); std::cout << "listen returned " << ret << "\n"; nm->addSocket(ls); while(true) { std::cout << "** select() **\n"; nm->select(NULL); } }