SOL9 2.0 Class: InetAddress

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * InetAddress.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000

#pragma once

#include <sol\Object.h>
#include <sol\String.h>
#include <sol\StringT.h>

/**
 * InetAddress class
 */
namespace SOL {

class InetAddress :public Object {
private:
    sockaddr_in        address;
    StringT<char>    dottedAddress;    //1999.08.06

public:
    /**
     *
     */
    InetAddress() {
        memset(&address, 0, sizeof(address));
    }

public:
    /**
     * Given port(in host byte order) only as an argument, address is INADDR_ANY.
     */
    //2008/07/11
    InetAddress(unsigned short port) 
    {
        memset(&address, 0, sizeof(address));

        address.sin_family = AF_INET;
        address.sin_addr.s_addr = htonl(INADDR_ANY);    
        //INADDR_ANY is really a 0x00000000,so htonl(INADDR_ANY)=INADDR_ANY

        address.sin_port = htons(port);
    }

public:
    /**
     * @param host    Internet host name
     * @param port    Port number(in host byte order)
     */
    InetAddress(const char* host, unsigned short port) 
    {
        memset(&address, 0, sizeof(address));
        address.sin_family = AF_INET;
        if (host) {
            unsigned long addr = inet_addr(host);
            if(addr == INADDR_NONE) {
                HOSTENT* hostEnt = gethostbyname(host);
                if(hostEnt == NULL) {
                    throw Exception("InetAddress#InetAddress,1,Error in resolving address", 0); 
                }
                address.sin_addr = *((LPIN_ADDR)*hostEnt->h_addr_list);
            }
        } else {
            //If host were NULL, throw the followig exception
            throw InvalidArgumentException("InetAddress#InetAddress,2,host name is NULL", 0);
        }
        address.sin_port = htons(port);
    }

public:
    // The port and addr must be in host-byte-order.
    InetAddress(unsigned short port, unsigned long addr) 
    {
        memset(&address, 0, sizeof(address));

        address.sin_family = AF_INET;
        address.sin_port = htons(port);
        address.sin_addr.s_addr = htonl(addr);
    }

    sockaddr_in*    getAddress() {
            return &address;
    }

    int            getSize() {
            return sizeof(address);
    }

    unsigned long getHostAddress() {
            return address.sin_addr.s_addr;
    }

    const char*     getDottedAddress() {
            dottedAddress = inet_ntoa(address.sin_addr);
            return (const char*)dottedAddress;
    }

    unsigned short    getPort() {
            return address.sin_port;
    }

    void    setAddress(unsigned long addr) {
            address.sin_addr.s_addr = addr;
            
    }
    void    setPort(unsigned short port) {
            address.sin_port = port;
    }
};

}


Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.