Pergunta

Eu tenho usado getaddrinfo para procurar endereços de soquete para comandos de soquete básico. Recentemente, porém, os endereços que ele retorna para mim são para endereços IP falsos, que eu encontrei usando o INET_NTOP. Eu tentei meu código, assim como o fornecido em Guia de Beej, e ambos produzem os mesmos resultados. Aqui está o código:

struct addrinfo hints, *info;
int status;

memset(&hints, 0, sizeof hints);

hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;

if(status = getaddrinfo(address, port, &hints, &info)) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
}

char ip4[INET_ADDRSTRLEN];
inet_ntop(AF_INET, info->ai_addr, ip4, INET_ADDRSTRLEN);

std::cout<<ip4<<std::endl;

Não importa o endereço que eu use, sempre me dá um IP do formulário

16.2.x.y

onde 256*x + y é igual ao número da porta. Alguém já viu isso acontecer, ou alguém pode adivinhar por que está me dando isso?

Foi útil?

Solução

Você não deveria estar passando

((sockaddr_in const *)info->ai_addr)->sin_addr

para inet_ntop?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top