rendered paste body== 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 <cstring>
#include <cstdlib>
#include <iostream>
#include <arpa/inet.h>
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);
}