diff options
-rw-r--r-- | camel/ChangeLog | 9 | ||||
-rw-r--r-- | camel/camel-tcp-stream-raw.c | 16 |
2 files changed, 18 insertions, 7 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index c351ea614e..8df67af2bc 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,8 @@ +2003-12-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-raw.c (socket_connect): Save errno and check + the return of the socket() call. + 2003-12-24 Rodrigo Moya <rodrigo@ximian.com> * providers/groupwise/camel-groupwise-provider.c @@ -9,8 +14,8 @@ * providers/groupwise/camel-groupwise-provider.c: removed useless configuration options, and added other options from the IMAP provider. - (camel_provider_module_init): register a SMTP transport object also, and - removed SASL registration, since we don't support it. + (camel_provider_module_init): register a SMTP transport object + also, and removed SASL registration, since we don't support it. 2003-12-19 Sivaiah Nallagatla <snallagatla@novell.com> diff --git a/camel/camel-tcp-stream-raw.c b/camel/camel-tcp-stream-raw.c index 819647cff6..d2cee82c0a 100644 --- a/camel/camel-tcp-stream-raw.c +++ b/camel/camel-tcp-stream-raw.c @@ -277,6 +277,7 @@ socket_connect (struct hostent *h, int port) struct timeval tv; socklen_t len; int cancel_fd; + int errnosav; int ret, fd; /* see if we're cancelled yet */ @@ -304,13 +305,15 @@ socket_connect (struct hostent *h, int port) } #endif - fd = socket (h->h_addrtype, SOCK_STREAM, 0); + if ((fd = socket (h->h_addrtype, SOCK_STREAM, 0) == -1)) + return -1; cancel_fd = camel_operation_cancel_fd (NULL); if (cancel_fd == -1) { - ret = connect (fd, saddr, len); - if (ret == -1) { + if (connect (fd, saddr, len) == -1) { + errnosav = errno; close (fd); + errno = errnosav; return -1; } @@ -322,14 +325,15 @@ socket_connect (struct hostent *h, int port) flags = fcntl (fd, F_GETFL); fcntl (fd, F_SETFL, flags | O_NONBLOCK); - ret = connect (fd, saddr, len); - if (ret == 0) { + if (connect (fd, saddr, len) == 0) { fcntl (fd, F_SETFL, flags); return fd; } if (errno != EINPROGRESS) { + errnosav = errno; close (fd); + errno = errnosav; return -1; } @@ -359,7 +363,9 @@ socket_connect (struct hostent *h, int port) len = sizeof (int); if (getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &len) == -1) { + errnosav = errno; close (fd); + errno = errnosav; return -1; } |