From 6239442566ca21b3cabe5c538df4d7669e37d2a8 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sat, 26 Apr 2003 21:55:15 +0000 Subject: [PATCH] * Anytime a socket connect() fails, CLOSE THE SOCKET before erroring out. Not doing so causes a file descriptor leak. --- citadel/ChangeLog | 5 +++++ citadel/citadel_ipc.c | 2 ++ citadel/citmail.c | 1 + citadel/clientsocket.c | 1 + 4 files changed, 9 insertions(+) diff --git a/citadel/ChangeLog b/citadel/ChangeLog index f2edb0be7..9485bc4b7 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,8 @@ $Log$ + Revision 605.39 2003/04/26 21:55:15 ajc + * Anytime a socket connect() fails, CLOSE THE SOCKET before erroring out. + Not doing so causes a file descriptor leak. + Revision 605.38 2003/04/26 04:22:51 ajc * Removal of individual "remote" lines from message delivery instruction sets was corrupting the end of the set, rendering the "bounceto" line unusable @@ -4646,3 +4650,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import + diff --git a/citadel/citadel_ipc.c b/citadel/citadel_ipc.c index c4feabae6..921e7d63b 100644 --- a/citadel/citadel_ipc.c +++ b/citadel/citadel_ipc.c @@ -2487,6 +2487,7 @@ static int connectsock(char *host, char *service, char *protocol, int defaultPor } if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) < 0) { + close(s); return -1; } @@ -2508,6 +2509,7 @@ static int uds_connectsock(int *isLocal, char *sockpath) } if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + close(s); return -1; } diff --git a/citadel/citmail.c b/citadel/citmail.c index cadb6b25e..00e6f9165 100644 --- a/citadel/citmail.c +++ b/citadel/citmail.c @@ -65,6 +65,7 @@ int uds_connectsock(char *sockpath) if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { fprintf(stderr, "can't connect: %s\n", strerror(errno)); + close(s); exit(3); } diff --git a/citadel/clientsocket.c b/citadel/clientsocket.c index 24aa21e6b..5ea001912 100644 --- a/citadel/clientsocket.c +++ b/citadel/clientsocket.c @@ -87,6 +87,7 @@ int sock_connect(char *host, char *service, char *protocol) if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) < 0) { lprintf(3, "can't connect to %s:%s: %s\n", host, service, strerror(errno)); + close(s); return(-1); } -- 2.39.2