Я пытаюсь реализовать функцию с именем "inet_pton", которая преобразует строковое представление IPv4 или IPv6 (например, "66.102.1.147" [google]) в двоичную упорядоченную байтовую сеть. Вот соответствующая часть моего кода:
#if defined WIN32
int inet_pton (int af, const char *src, void *dst)
{
const void *data;
size_t len;
struct addrinfo hints, *res;
hints.ai_family = af;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_UDP;
hints.ai_flags = AI_NUMERICHOST;
if (getaddrinfo (src, NULL, &hints, &res))
{
std::cout << "ERROR : inet_pton() in " << __FILE__ << " at line " << __LINE__ << std::endl;
std::cout << " : getaddrinfo() failed to get IP address info for \"" << src << "\"" << std::endl;
return 0;
}
...
Таким образом, src является входящей строкой IP. Тем не менее, я всегда получаю сообщение об ошибке типа
getaddrinfo () не смог получить информацию об IP-адресе для "66.102.1.147"
Может ли кто-нибудь с опытом работы с winsock прокомментировать? Я также попробовал другой метод, функция
WSAStringToAddress ((LPTSTR)src, af, NULL, (LPSOCKADDR) &sa, &address_length)
Но он всегда возвращает код ошибки WSAEINVAL, указывающий неверную строку IP. Это не имеет смысла для меня. Я использую VS2005 в качестве моей IDE.