Repository : ssh://git@open-mesh.org/alfred
On branch : master
commit 26a7b5e98d76ad77ddd2b5fe9120ce4e78ef71ee Author: Sven Eckelmann sven@narfation.org Date: Thu Feb 5 15:47:13 2015 +0100
alfred: Close socket after connect failure
The socket is still using one file descriptor of the process when the connection fails. This fd leak is non-problematic in the current client process code because the client would be closed in this situation anyway and therefore the socket would be closed when the process is stopped. But people using this as example code may not stop the process on this error. The unclosed and unused sockets would accumulate and the process would hit the limit for open file descriptors.
Signed-off-by: Sven Eckelmann sven@narfation.org Signed-off-by: Simon Wunderlich sw@simonwunderlich.de
26a7b5e98d76ad77ddd2b5fe9120ce4e78ef71ee gpsd/alfred-gpsd.c | 2 ++ unix_sock.c | 2 ++ vis/vis.c | 2 ++ 3 files changed, 6 insertions(+)
diff --git a/gpsd/alfred-gpsd.c b/gpsd/alfred-gpsd.c index 86414cf..2516417 100644 --- a/gpsd/alfred-gpsd.c +++ b/gpsd/alfred-gpsd.c @@ -40,6 +40,8 @@ static int alfred_open_sock(struct globals *globals)
if (connect(globals->unix_sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + close(globals->unix_sock); + globals->unix_sock = -1; perror("can't connect to unix socket"); return -1; } diff --git a/unix_sock.c b/unix_sock.c index d203c50..ae86956 100644 --- a/unix_sock.c +++ b/unix_sock.c @@ -84,6 +84,8 @@ int unix_sock_open_client(struct globals *globals)
if (connect(globals->unix_sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + close(globals->unix_sock); + globals->unix_sock = -1; perror("can't connect to unix socket"); return -1; } diff --git a/vis/vis.c b/vis/vis.c index 038d89d..4a14e66 100644 --- a/vis/vis.c +++ b/vis/vis.c @@ -173,6 +173,8 @@ static int alfred_open_sock(struct globals *globals)
if (connect(globals->unix_sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + close(globals->unix_sock); + globals->unix_sock = -1; perror("can't connect to unix socket"); return -1; }