summaryrefslogtreecommitdiff
path: root/src/streamer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/streamer.c')
-rw-r--r--src/streamer.c14
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_);
}