From 316d9b937933fc68d608772cf0bd2a60acbeb321 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 8 Jun 2011 21:57:33 +0000 Subject: streamer_stop fixed --- src/gstdvbbackend.c | 1 + src/streamer.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gstdvbbackend.c b/src/gstdvbbackend.c index 0134391..729c161 100644 --- a/src/gstdvbbackend.c +++ b/src/gstdvbbackend.c @@ -130,6 +130,7 @@ int main_loop(options_t* opt) ret = streamer_start(&streamer); if(!ret) { g_main_loop_run(loop); + streamer_stop(&streamer); signal_stop(); } diff --git a/src/streamer.c b/src/streamer.c index b09aa50..17483c1 100644 --- a/src/streamer.c +++ b/src/streamer.c @@ -78,6 +78,12 @@ int init_server(const char* host, const char* port) local_addr.sin_port = htons(9001); local_addr.sin_addr.s_addr = htonl(INADDR_ANY); + int on = 1; + if (setsockopt(server, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) { + log_printf(ERROR, "streamer: setsockopt(SO_REUSEADDR) failed"); + return -1; + } + if(bind(server, (struct sockaddr *)&local_addr, sizeof(local_addr))==-1) { log_printf(ERROR, "streamer: bind() call failed"); return -1; @@ -142,10 +148,10 @@ static gpointer streamer_thread_func(gpointer data) int alen=sizeof(remote_addr); int new_client = accept(streamer->fd_, (struct sockaddr *)&remote_addr, &alen); if(new_client==-1) { - log_printf(INFO, "accept() call failed"); + log_printf(ERROR, "accept() call failed"); break; } - log_printf(INFO, "new connection %s:%d (fd=%d)\n", inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port), new_client); + log_printf(INFO, "new connection %s:%d (fd=%d)", inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port), new_client); add_fd(streamer, new_client); } @@ -173,10 +179,12 @@ void streamer_stop(streamer_t* streamer) if(!streamer) return; - close(streamer->fd_); + shutdown(streamer->fd_, SHUT_RDWR); if(streamer->thread_) { log_printf(NOTICE, "waiting for streamer thread to stop"); g_thread_join(streamer->thread_); } + + close(streamer->fd_); } -- cgit v1.2.3