summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2011-06-08 21:57:33 +0000
committerChristian Pointner <equinox@spreadspace.org>2011-06-08 21:57:33 +0000
commit316d9b937933fc68d608772cf0bd2a60acbeb321 (patch)
treec9886389e0f2c1b692d2cd26b02d7f79c47ec27c
parentadded accept() (diff)
streamer_stop fixed
-rw-r--r--src/gstdvbbackend.c1
-rw-r--r--src/streamer.c14
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_);
}