diff --git a/doc/Changelog b/doc/Changelog index 47ed3027d..35024a3cb 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +13 December 2016: Wouter + - Fix #1182: Fix Resource leak (socket), at startup. + 9 December 2016: Wouter - Fix #1176: stack size too small for Alpine Linux. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 6637483b9..129700fb8 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -720,28 +720,37 @@ create_local_accept_sock(const char *path, int* noproto) /* The socket already exists and cannot be removed */ log_err("Cannot remove old local socket %s (%s)", path, strerror(errno)); - return -1; + goto err; } if (bind(s, (struct sockaddr *)&usock, (socklen_t)sizeof(struct sockaddr_un)) == -1) { log_err("Cannot bind local socket %s (%s)", path, strerror(errno)); - return -1; + goto err; } if (!fd_set_nonblock(s)) { log_err("Cannot set non-blocking mode"); - return -1; + goto err; } if (listen(s, TCP_BACKLOG) == -1) { log_err("can't listen: %s", strerror(errno)); - return -1; + goto err; } (void)noproto; /*unused*/ return s; + +err: +#ifndef USE_WINSOCK + close(s); +#else + closesocket(s); +#endif + return -1; + #else (void)path; log_err("Local sockets are not supported");