From 640e03372fc450fbedde66b2daba2563ea652456 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 8 Jun 2011 21:33:43 +0000 Subject: added tcp server init --- src/streamer.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- src/streamer.h | 1 + 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/streamer.c b/src/streamer.c index fd1223d..82cb0f4 100644 --- a/src/streamer.c +++ b/src/streamer.c @@ -26,10 +26,16 @@ #include #include - +#include +#include +#include #include #include +#include +#include +#include + #include "streamer.h" #include "datatypes.h" @@ -56,12 +62,46 @@ static void fdremoved_cb(GstElement* sink, gint fd, gpointer data) log_printf(INFO, "fdsink: successfully removed fd %d (sink has now %d fds)", fd, num_fds); } +int init_server(const char* host, const char* port) +{ + int server = socket(AF_INET, SOCK_STREAM, 0); + if(server < 0) { + perror("streamer: socket() call failed"); + return -1; + } + + // TODO: resolve host and port + + struct sockaddr_in local_addr; + memset((char *) &local_addr, 0, sizeof(local_addr)); + local_addr.sin_family = AF_INET; + local_addr.sin_port = htons(9001); + local_addr.sin_addr.s_addr = htonl(INADDR_ANY); + + if(bind(server, (struct sockaddr *)&local_addr, sizeof(local_addr))==-1) { + perror("streamer: bind() call failed"); + return -1; + } + + if(listen(server, 5)==-1) { + perror("streamer: listen() call failed"); + return -1; + } + + return server; +} + int streamer_init(streamer_t* streamer, GMainLoop *loop, const char* host, const char* port) { if(!streamer) return -1; - // TODO: init server socket here + streamer->host_ = host; + streamer->port_ = port; + streamer->fd_ = init_server(host, port); + if(streamer->fd_ < 0) { + return streamer->fd_; + } streamer->loop_ = loop; streamer->sink_ = gst_element_factory_make("multifdsink", "streamer"); @@ -128,7 +168,7 @@ void streamer_stop(streamer_t* streamer) if(!streamer) return; - // TODO: close server socket here + close(streamer->fd_); if(streamer->thread_) { log_printf(NOTICE, "waiting for streamer thread to stop"); diff --git a/src/streamer.h b/src/streamer.h index 069787d..b47e252 100644 --- a/src/streamer.h +++ b/src/streamer.h @@ -35,6 +35,7 @@ struct streamer_struct { GThread* thread_; char* host_; char* port_; + int fd_; }; typedef struct streamer_struct streamer_t; -- cgit v1.2.3