X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Fip.c;h=8dbc2b3e006bfbcf788e68e846beeae470c43908;hb=0d0e445543703d3294a16a17a4606c9eade7afcb;hp=72bcd9e0765e6028f6ba8a7c7ec7153c04cbb833;hpb=c988f1f4faa9f679f79beddf3c14676c5dcb8e28;p=exim.git diff --git a/src/src/ip.c b/src/src/ip.c index 72bcd9e07..8dbc2b3e0 100644 --- a/src/src/ip.c +++ b/src/src/ip.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/ip.c,v 1.2 2005/01/04 10:00:42 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions for doing things with sockets. With the advent of IPv6 this has @@ -165,7 +163,9 @@ return bind(sock, (struct sockaddr *)&sin, s_len); *************************************************/ /* This function connects a socket to a remote address and port. The socket may -or may not have previously been bound to a local interface. +or may not have previously been bound to a local interface. The socket is not +closed, even in cases of error. It is expected that the calling function, which +created the socket, will be the one that closes it. Arguments: sock the socket @@ -224,17 +224,11 @@ alarm(0); /* There is a testing facility for simulating a connection timeout, as I can't think of any other way of doing this. It converts a connection refused -into a timeout. - -I had to add a second fudge to keep the tests working. Attempts to connect to -10.x.x.x are expected to timeout, but sometimes they now give "No route to -host". */ +into a timeout if the timeout is set to 999999. */ if (running_in_test_harness) { - if ((save_errno == ECONNREFUSED && timeout == 999999) || - (save_errno == EHOSTUNREACH && timeout > 0 && - Ustrncmp(address, "10.", 3) == 0)) + if (save_errno == ECONNREFUSED && timeout == 999999) { rc = -1; save_errno = EINTR; @@ -249,7 +243,6 @@ if (rc >= 0) return 0; /* A failure whose error code is "Interrupted system call" is in fact an externally applied timeout if the signal handler has been run. */ -close(sock); errno = (save_errno == EINTR && sigalrm_seen)? ETIMEDOUT : save_errno; return -1; }