Example #1
0
void cSockAddrIn::getAllHostsName(const cString& name,
                                  cList<cSockAddrIn>& lists,
                                  WORD port /* = 0 */)
{
    socketInitSingleton::GetHandle().init();
    cSockAddrIn ret; // The new constructor INET addressed
    ret.sin_family = AF_INET;
    ret.sin_port   = htons(port);

    lists.removeAll();

    // Lock the mutex
    cLock lock(g_getHostByNameLock);

    /* Invoke the 'gethostname' function call */
    /* Recieve a list of all address          */
    cSArray<char> asciiName = name.getASCIIstring();
    hostent * addr = gethostbyname(asciiName.getBuffer());

    for (unsigned int i = 0; ((DWORD *)addr->h_addr_list[i] != NULL) ; i++)
    {
        /* Get the address */
        #ifndef XSTL_LINUX
            ret.sin_addr.S_un.S_addr = *((DWORD *)(addr->h_addr_list[i])); // Return the first address
        #else
            ret.sin_addr.s_addr = *((DWORD *)(addr->h_addr_list[i])); // Return the first address
        #endif

        /* Fill with new valid address */
        lists.append(ret);
    }
}
Example #2
0
cSockAddrIn cSockAddrIn::getHostByName(const cString& name, WORD port /* = 0 */)
{
    socketInitSingleton::GetHandle().init();
    cSockAddrIn ret;

    ret.sin_family = AF_INET;
    ret.sin_port = htons(port);

    // Lock the mutex
    cLock lock(g_getHostByNameLock);

    // Query the address.
    cSArray<char> asciiName = name.getASCIIstring();
    hostent* addr = gethostbyname(asciiName.getBuffer());

    // Return the first address of the hostent struct.
    #if defined(XSTL_WINDOWS) || defined (XSTL_CE)
        // Windows ordering.
        ret.sin_addr.S_un.S_addr = *((DWORD *)(addr->h_addr_list[0]));
    #else
    #ifdef XSTL_LINUX
        // Linux version
        ret.sin_addr.s_addr = *((DWORD *)(addr->h_addr_list[0]));
    #else
        #error "Add platform functionalty here!";
    #endif
    #endif

    return ret;
}
Example #3
0
cSockAddrIn::cSockAddrIn(const cString& name, WORD port /* = 0 */)
{
    sin_family = AF_INET;
    sin_port   = htons(port);

    // Covert to ASCII
    cSArray<char> asciiName = name.getASCIIstring();

    #ifndef XSTL_LINUX
        sin_addr.S_un.S_addr = inet_addr(asciiName.getBuffer());
        if (sin_addr.S_un.S_addr == INADDR_NONE)
    #else
        sin_addr.s_addr = inet_addr(asciiName.getBuffer());
        if (sin_addr.s_addr == INADDR_NONE)
    #endif
    {
        XSTL_THROW(cSocketException, SOCKETEXCEPTION_ADDRESS_ERROR);
    }
    // Free memory
    memset(&sin_zero, 0, sizeof(sin_zero));
}