mirror of
https://github.com/PowerShell/openssh-portable.git
synced 2025-07-31 01:35:11 +02:00
upstream: handle EINTR in waitfd() and timeout_connect() helpers;
bz#3071; ok dtucker@ OpenBSD-Commit-ID: 08fa87be50070bd8b754d9b1ebb1138d7bc9d8ee
This commit is contained in:
parent
fe2ec0b9c1
commit
3d06ff4bbd
21
misc.c
21
misc.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: misc.c,v 1.152 2020/05/29 11:17:56 dtucker Exp $ */
|
/* $OpenBSD: misc.c,v 1.153 2020/06/26 05:16:38 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
* Copyright (c) 2005-2020 Damien Miller. All rights reserved.
|
* Copyright (c) 2005-2020 Damien Miller. All rights reserved.
|
||||||
@ -253,7 +253,7 @@ waitfd(int fd, int *timeoutp, short events)
|
|||||||
errno = oerrno;
|
errno = oerrno;
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
return 0;
|
return 0;
|
||||||
else if (r == -1 && errno != EAGAIN)
|
else if (r == -1 && errno != EAGAIN && errno != EINTR)
|
||||||
return -1;
|
return -1;
|
||||||
else if (r == 0)
|
else if (r == 0)
|
||||||
break;
|
break;
|
||||||
@ -292,12 +292,17 @@ timeout_connect(int sockfd, const struct sockaddr *serv_addr,
|
|||||||
return connect(sockfd, serv_addr, addrlen);
|
return connect(sockfd, serv_addr, addrlen);
|
||||||
|
|
||||||
set_nonblock(sockfd);
|
set_nonblock(sockfd);
|
||||||
if (connect(sockfd, serv_addr, addrlen) == 0) {
|
for (;;) {
|
||||||
/* Succeeded already? */
|
if (connect(sockfd, serv_addr, addrlen) == 0) {
|
||||||
unset_nonblock(sockfd);
|
/* Succeeded already? */
|
||||||
return 0;
|
unset_nonblock(sockfd);
|
||||||
} else if (errno != EINPROGRESS)
|
return 0;
|
||||||
return -1;
|
} else if (errno == EINTR)
|
||||||
|
continue;
|
||||||
|
else if (errno != EINPROGRESS)
|
||||||
|
return -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (waitfd(sockfd, timeoutp, POLLIN | POLLOUT) == -1)
|
if (waitfd(sockfd, timeoutp, POLLIN | POLLOUT) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user