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;
}
簡而言之:這是預期。你需要在'connect()'的錯誤檢查路徑中檢查'errno!= EINPROGRESS'。 – caf 2011-06-02 06:21:16
*第16章** UNIX網絡編程(第1卷)的非阻塞I/O * **詳細描述此功能並提供演示。 – diabloneo 2014-02-23 09:08:34