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); } }
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; }
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)); }