diff options
Diffstat (limited to 'src/streamer.c')
-rw-r--r-- | src/streamer.c | 14 |
1 files changed, 11 insertions, 3 deletions
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_); } |