Beej's Simple Client mã ví dụ lặp qua tất cả các địa chỉ IP được trả về từ getaddrinfo(), cho đến khi nó có thể kết nối với địa chỉ đầu tiên. Xem mã bên dưới.Có cần thiết phải kết nối với tất cả các địa chỉ được trả về bởi getaddrinfo() không?
Điều này luôn luôn cần thiết, hoặc là OK để cho rằng chúng tôi chỉ phải cố gắng kết nối với địa chỉ đầu tiên được trả về bởi 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;
}
Hoặc thực tế hơn, tại sao máy chủ có nhiều địa chỉ? Việc sử dụng rõ ràng nhất là dự phòng. Nếu máy chủ đầu tiên không phản hồi, bạn có thể có thành công tốt hơn nếu bạn đi bộ danh sách ... – asveikau
@asveikau Lý do thực sự mà máy chủ có nhiều địa chỉ có thể khác nhau. Nó có thể là do sự thừa, hoặc nó có thể được phục vụ hai mạng khác nhau, hoặc vô số các lý do khác. –
Dự phòng hoặc Cân bằng tải. – Lothar