All pastes #884785 Raw Edit

Stuff

public text v1 · immutable
#884785 ·published 2008-01-30 16:32 UTC
rendered paste body
== socketaddress.h ==

#include <sys/socket.h>

class SocketAddress
{
public:
    virtual bool isValid() = 0;
    virtual operator socklen_t() = 0;
    virtual struct sockaddr& getSockAddr() = 0;
    virtual ~SocketAddress() {}
    SocketAddress() {}
};

== ipv4address.h == 

#include <sys/types.h>
#include <netinet/in.h>
#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 <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);
    }

    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 <iostream>
#include <sys/socket.h>

int main(int argc, char* argv[])
{
        NetManager* nm = NetManager::instance();
        ListenSocket<TestTCPSocket> 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);
        }
    
}