diff options
author | Christian Pointner <equinox@spreadspace.org> | 2011-06-08 21:33:43 +0000 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2011-06-08 21:33:43 +0000 |
commit | 640e03372fc450fbedde66b2daba2563ea652456 (patch) | |
tree | 75881e86a221e3f6724a1a7e7469c93fc68b7539 | |
parent | added basic streamer code (diff) |
added tcp server init
-rw-r--r-- | src/streamer.c | 46 | ||||
-rw-r--r-- | 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 <gst/gst.h> #include <sys/types.h> - +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> #include <errno.h> #include <string.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + #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; |