SOL9 2.0 Class: IPv6AddressInfoList

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

Source code

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



// SOL9
// 2010/11/20

#pragma once

#include <sol/net/AddressInfoList.h>
#include <sol/net/IPv6AddressInfo.h>


namespace SOL {

class IPv6AddressInfoList :public AddressInfoList {

public:
    IPv6AddressInfoList()
    {

    }

public:
    ~IPv6AddressInfoList()
    {
    }


public:
    /**
     * Get AddressInformation by calling Windows API getaddrinfo.
     * This returns the number of entries of a list of the addresses obtained.
     */
    int getAddrInfo(__in const TCHAR*ipaddr, __in_opt const TCHAR* service=NULL)
    {
        ADDRINFOT hints;
        memset(&hints, 0, sizeof(hints));
        //hints.ai_socktype = SOCK_STREAM;
        hints.ai_family   = AF_INET6;
        return AddressInfoList::getAddrInfo(ipaddr, service, &hints);
    }

public:
    /**
     * Get a copy of IPv6AddressInfo in the first addrinfo.  
     */
    bool getFirst(__out IPv6AddressInfo& info) 
    {
        return getNth(0, info);
    }

public:
    /**
     * Get a copy of IPv6AddressInfo in n-th addrinfo.  
     */
    bool getNth(__in const int n, __out IPv6AddressInfo& info) 
    {
        bool rc = false;
        const ADDRINFOT* ptr = AddressInfoList::getNth(n);

        if (ptr && ptr->ai_family == AF_INET6) {
            info.copy(ptr);
            rc = true;
        }
        return rc;
    }

public:
    /**
     * Get a copy of IPv6 sockaddr_in6 in the first addrinfo.  
     */
    bool getFirst(__out sockaddr_in6& sockaddr) 
    {
        return getNth(0, sockaddr);
    }

public:
    /**
     * Get a copy of IPv6 sockaddr_in6 in n-th addrinfo.  
     */
    bool getNth(__in const int n, __out sockaddr_in6& sockaddr) 
    {
        bool rc = false;
        const ADDRINFOT* ptr = AddressInfoList::getNth(n);
        if (ptr && ptr->ai_family == AF_INET6) {
            sockaddr_in6* addr = (sockaddr_in6*) ptr->ai_addr;
            if (addr) {
                memcpy(&sockaddr, addr, sizeof(sockaddr));
                rc = true;
            }
        }
        return rc;
    }

};

}


Last modified: 1 Feb 2012

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