View | Details | Raw Unified | Return to bug 3071 | Differences between
and this patch

Collapse All | Expand All

(-)a/misc.c (-7 / +12 lines)
Lines 253-259 waitfd(int fd, int *timeoutp, short events) Link Here
253
		errno = oerrno;
253
		errno = oerrno;
254
		if (r > 0)
254
		if (r > 0)
255
			return 0;
255
			return 0;
256
		else if (r == -1 && errno != EAGAIN)
256
		else if (r == -1 && errno != EAGAIN && errno != EINTR)
257
			return -1;
257
			return -1;
258
		else if (r == 0)
258
		else if (r == 0)
259
			break;
259
			break;
Lines 292-303 timeout_connect(int sockfd, const struct sockaddr *serv_addr, Link Here
292
		return connect(sockfd, serv_addr, addrlen);
292
		return connect(sockfd, serv_addr, addrlen);
293
293
294
	set_nonblock(sockfd);
294
	set_nonblock(sockfd);
295
	if (connect(sockfd, serv_addr, addrlen) == 0) {
295
	for (;;) {
296
		/* Succeeded already? */
296
		if (connect(sockfd, serv_addr, addrlen) == 0) {
297
		unset_nonblock(sockfd);
297
			/* Succeeded already? */
298
		return 0;
298
			unset_nonblock(sockfd);
299
	} else if (errno != EINPROGRESS)
299
			return 0;
300
		return -1;
300
		} else if (errno == EINTR)
301
			continue;
302
		else if (errno != EINPROGRESS)
303
			return -1;
304
		break;
305
	}
301
306
302
	if (waitfd(sockfd, timeoutp, POLLIN | POLLOUT) == -1)
307
	if (waitfd(sockfd, timeoutp, POLLIN | POLLOUT) == -1)
303
		return -1;
308
		return -1;

Return to bug 3071