From baf2a2c42c061138f0da6fa4921acc85df129216 Mon Sep 17 00:00:00 2001 From: Beralt Date: Wed, 15 Oct 2014 13:35:01 +0200 Subject: [PATCH] tvhdhomerun: properly close sockets on error --- src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c index 33e99330..ace95234 100644 --- a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c +++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c @@ -128,11 +128,13 @@ tvhdhomerun_frontend_input_thread ( void *aux ) /* enable broadcast */ if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *) &sock_opt, sizeof(sock_opt)) < 0) { + close(sockfd); tvhlog(LOG_ERR, "tvhdhomerun", "failed to enable broadcast on socket (%d)", errno); return NULL; } if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &sock_opt, sizeof(sock_opt)) < 0) { + close(sockfd); tvhlog(LOG_ERR, "tvhdhomerun", "failed to set address reuse on socket (%d)", errno); return NULL; } @@ -148,12 +150,14 @@ tvhdhomerun_frontend_input_thread ( void *aux ) sock_addr.sin_port = 0; if(bind(sockfd, (struct sockaddr *) &sock_addr, sizeof(sock_addr)) != 0) { tvhlog(LOG_ERR, "tvhdhomerun", "failed bind socket: %d", errno); + close(sockfd); return NULL; } memset(&sock_addr, 0, sizeof(sock_addr)); if(getsockname(sockfd, (struct sockaddr *) &sock_addr, &sockaddr_len) != 0) { tvhlog(LOG_ERR, "tvhdhomerun", "failed to getsockname: %d", errno); + close(sockfd); return NULL; } @@ -227,7 +231,7 @@ tvhdhomerun_frontend_input_thread ( void *aux ) sbuf_free(&sb); tvhpoll_destroy(efd); - shutdown(sockfd, SHUT_RD); + close(sockfd); return NULL; }