9
में मैं समारोह के टाइमआउट मान सेट करने के लिए कनेक्ट चाहते हैं, लेकिन मैं इस त्रुटि मिलती है: "ऑपरेशन अब प्रगति में"ऑपरेशन अब कनेक्ट (समारोह) पर प्रगति त्रुटि त्रुटि
मेरे कोड:
if ((he = gethostbyname(authdefhost)) == NULL) {
snprintf(errbuf, CERRBUFSIZ - 1, "cannot resolve %s: %s\n", authdefhost, hstrerror(h_errno));
return -1;
}
sin.sin_family = AF_INET;
memcpy(&sin.sin_addr, he->h_addr_list[0], sizeof(struct in_addr));
if ((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
snprintf(errbuf, CERRBUFSIZ - 1, "cannot create client socket: %s\n", strerror(errno));
return -1;
}
if ((fcntl(sd, F_SETFL, O_NONBLOCK) < 0))
printf("error on setting socket flags.");
if (connect(sd, (void *) & sin, sizeof(sin)) == -1) {
snprintf(errbuf, CERRBUFSIZ - 1, "cannot connect to server %s: %s\n", authdefhost, strerror(errno));
close(sd);
return -1;
}
FD_ZERO(&fdset);
FD_SET(sd, &fdset);
int rv;
if ((rv = select(sd + 1, NULL, &fdset, NULL, &tv)) == -1) {
printf("error occurred on select function.");
return -1;
}
else if (rv == 0) {
printf("time out occurred.");
return -1;
}
else {
printf("connection established");
return sd;
}
संक्षेप में: यह आशा की जाती है। 'कनेक्ट() 'के लिए आपको अपने त्रुटि-जांच पथ में विशेष रूप से' errno! = EINPROGRESS' 'की जांच करनी होगी। – caf
* अध्याय 16 यूनिक्स नेटवर्क प्रोग्रामिंग (वॉल्यूम 1) के अनब्लॉकिंग I/O * ** इस सुविधा का विवरण विस्तार से वर्णन करें और एक डेमो प्रस्तुत करें। – diabloneo