diff options
author | Christian Pointner <equinox@spreadspace.org> | 2011-06-08 21:57:33 +0000 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2011-06-08 21:57:33 +0000 |
commit | 316d9b937933fc68d608772cf0bd2a60acbeb321 (patch) | |
tree | c9886389e0f2c1b692d2cd26b02d7f79c47ec27c | |
parent | added accept() (diff) |
streamer_stop fixed
-rw-r--r-- | src/gstdvbbackend.c | 1 | ||||
-rw-r--r-- | 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_); } |