diff options
Diffstat (limited to 'sshconnect.c')
-rw-r--r-- | sshconnect.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/sshconnect.c b/sshconnect.c index 8aac221d3..dfa2e5b09 100644 --- a/sshconnect.c +++ b/sshconnect.c | |||
@@ -13,7 +13,7 @@ | |||
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include "includes.h" | 15 | #include "includes.h" |
16 | RCSID("$OpenBSD: sshconnect.c,v 1.141 2003/05/15 14:55:25 djm Exp $"); | 16 | RCSID("$OpenBSD: sshconnect.c,v 1.142 2003/05/23 08:29:30 djm Exp $"); |
17 | 17 | ||
18 | #include <openssl/bn.h> | 18 | #include <openssl/bn.h> |
19 | 19 | ||
@@ -225,7 +225,7 @@ timeout_connect(int sockfd, const struct sockaddr *serv_addr, | |||
225 | fd_set *fdset; | 225 | fd_set *fdset; |
226 | struct timeval tv; | 226 | struct timeval tv; |
227 | socklen_t optlen; | 227 | socklen_t optlen; |
228 | int fdsetsz, optval, rc; | 228 | int fdsetsz, optval, rc, result = -1; |
229 | 229 | ||
230 | if (timeout <= 0) | 230 | if (timeout <= 0) |
231 | return (connect(sockfd, serv_addr, addrlen)); | 231 | return (connect(sockfd, serv_addr, addrlen)); |
@@ -257,11 +257,11 @@ timeout_connect(int sockfd, const struct sockaddr *serv_addr, | |||
257 | case 0: | 257 | case 0: |
258 | /* Timed out */ | 258 | /* Timed out */ |
259 | errno = ETIMEDOUT; | 259 | errno = ETIMEDOUT; |
260 | return (-1); | 260 | break; |
261 | case -1: | 261 | case -1: |
262 | /* Select error */ | 262 | /* Select error */ |
263 | debug("select: %s", strerror(errno)); | 263 | debug("select: %s", strerror(errno)); |
264 | return (-1); | 264 | break; |
265 | case 1: | 265 | case 1: |
266 | /* Completed or failed */ | 266 | /* Completed or failed */ |
267 | optval = 0; | 267 | optval = 0; |
@@ -269,18 +269,20 @@ timeout_connect(int sockfd, const struct sockaddr *serv_addr, | |||
269 | if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &optval, | 269 | if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &optval, |
270 | &optlen) == -1) | 270 | &optlen) == -1) |
271 | debug("getsockopt: %s", strerror(errno)); | 271 | debug("getsockopt: %s", strerror(errno)); |
272 | return (-1); | 272 | break; |
273 | if (optval != 0) { | 273 | if (optval != 0) { |
274 | errno = optval; | 274 | errno = optval; |
275 | return (-1); | 275 | break; |
276 | } | 276 | } |
277 | result = 0; | ||
277 | break; | 278 | break; |
278 | default: | 279 | default: |
279 | /* Should not occur */ | 280 | /* Should not occur */ |
280 | fatal("Bogus return (%d) from select()", rc); | 281 | fatal("Bogus return (%d) from select()", rc); |
281 | } | 282 | } |
282 | 283 | ||
283 | return (0); | 284 | xfree(fdset); |
285 | return (result); | ||
284 | } | 286 | } |
285 | 287 | ||
286 | /* | 288 | /* |