Beej's Simple Client código de ejemplo itera sobre todas las direcciones IP devueltas desde getaddrinfo(), hasta que se pueda conectar con la primera. Vea el código a continuación.¿Es necesario intentar conectarse a todas las direcciones devueltas por getaddrinfo()?
¿Esto siempre es necesario, o está bien suponer que solo tenemos que intentar conectarnos a la primera dirección devuelta por getaddrinfo()?
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if ((rv = getaddrinfo(argv[1], PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// ------------------------------------------------------------
// loop through all the results and connect to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("client: socket");
continue;
}
if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("client: connect");
continue;
}
break;
}
O más en la práctica, ¿por qué un host puede tener varias direcciones? El uso más obvio es la redundancia. Si el primer host no responde, puede tener un mayor éxito si recorre la lista ... – asveikau
@asveikau La razón real por la que un host tiene varias direcciones puede diferir. Puede ser debido a la redundancia, o puede ser que sirva para dos redes diferentes, o una multitud de otras razones. –
Redundancia o equilibrio de carga. – Lothar