Beej's Simple Client codice di esempio itera su tutti gli indirizzi IP restituiti da getaddrinfo(), finché non riesce a connettersi al primo. Guarda il codice qui sotto.E 'necessario tentare di connettersi a tutti gli indirizzi restituiti da getaddrinfo()?
È sempre necessario, o è giusto supporre che dobbiamo solo provare a connetterci al primo indirizzo restituito da 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, in pratica, perché un host può avere più indirizzi? L'uso più ovvio è la ridondanza. Se il primo host non risponde potrebbe avere un migliore successo se si cammina l'elenco ... – asveikau
@asveikau La ragione effettiva per cui un host ha più indirizzi può essere diversa. Può essere a causa della ridondanza, o può essere che serve due reti diverse, o una moltitudine di altri motivi. –
Ridondanza o bilanciamento del carico. – Lothar