Beej's Simple Client उदाहरण कोड getaddrinfo() से लौटाए गए सभी आईपी पतों पर पुनरावृत्त होता है, जब तक कि यह पहले से कनेक्ट नहीं हो जाता। नीचे दिया गया कोड देखें।getaddrinfo() द्वारा दिए गए सभी पते से कनेक्ट करने का प्रयास करना आवश्यक है?
क्या यह हमेशा आवश्यक है, या यह मानना ठीक है कि हमें केवल 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;
}
या अधिक व्यावहारिक रूप से, मेजबान के पास एकाधिक पते क्यों हो सकते हैं? सबसे स्पष्ट उपयोग अनावश्यकता है। यदि पहला होस्ट जवाब नहीं देता है तो आप बेहतर सफलता प्राप्त कर सकते हैं यदि आप सूची में चलते हैं ... – asveikau
@asveikau एक मेजबान के पास कई पते अलग-अलग कारण हो सकते हैं। यह अनावश्यकता के कारण हो सकता है, या हो सकता है कि यह दो अलग-अलग नेटवर्क, या अन्य कारणों की भीड़ हो। –
रिडंडेंसी या लोड संतुलन। – Lothar