[tuxdroid-svn] r371 - in daemon/trunk: . libs
Status: Beta
Brought to you by:
ks156
From: neimad <c2m...@c2...> - 2007-06-12 05:21:58
|
Author: neimad Date: 2007-06-12 07:21:55 +0200 (Tue, 12 Jun 2007) New Revision: 371 Modified: daemon/trunk/libs/USBDaemon_tcp_server.c daemon/trunk/libs/USBDaemon_tcp_server.h daemon/trunk/main.c Log: * Split initialization and event loop of daemon. Modified: daemon/trunk/libs/USBDaemon_tcp_server.c =================================================================== --- daemon/trunk/libs/USBDaemon_tcp_server.c 2007-06-12 04:56:15 UTC (rev 370) +++ daemon/trunk/libs/USBDaemon_tcp_server.c 2007-06-12 05:21:55 UTC (rev 371) @@ -71,18 +71,19 @@ } /** - * Server's event loop + * Server initialization. + * Opens and binds the TCP socket. + * + * \return 0 if successful, -1 otherwise */ -void tcp_server_loop(void) +int tcp_server_init(void) { -#define TIMEOUT ((struct timeval){ .tv_sec = 0, .tv_usec = 50000 }) - tcp_frame_t datas_recv; int val; if ((tcp_server_handle = socket(AF_INET, SOCK_STREAM, 0)) < 0) { log_error("TCP socket: socket creation failed: %m"); - return; + return -1; } val = 1; @@ -90,28 +91,41 @@ &val, sizeof(val)) < 0) { /* Don't need to quit on this one. */ - log_error("TCP socket: setsockopt failed: %m"); + log_warning("TCP socket: setsockopt failed: %m"); } memset(&tcp_server_sockaddr, 0, sizeof(tcp_server_sockaddr)); tcp_server_sockaddr.sin_family = AF_INET; tcp_server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); tcp_server_sockaddr.sin_port = htons(TUX_SERVER_PORT); + if (bind (tcp_server_handle, (struct sockaddr *)&tcp_server_sockaddr, sizeof(tcp_server_sockaddr)) < 0) { log_error("TCP socket: bind failed: %m"); - exit(2); + return -1; } + if (listen(tcp_server_handle, 5) < 0) { log_error("TCP socket: listen failed: %m"); - return; + return -1; } log_info("TCP socket: opened"); tux_tcp_status = TUX_TCP_STATUS_UP; + return 0; +} + +/** + * Server's event loop + */ +void tcp_server_loop(void) +{ +#define TIMEOUT ((struct timeval){ .tv_sec = 0, .tv_usec = 50000 }) + tcp_frame_t datas_recv; + while (tcp_server_handle >= 0) { struct timeval timeout = TIMEOUT; Modified: daemon/trunk/libs/USBDaemon_tcp_server.h =================================================================== --- daemon/trunk/libs/USBDaemon_tcp_server.h 2007-06-12 04:56:15 UTC (rev 370) +++ daemon/trunk/libs/USBDaemon_tcp_server.h 2007-06-12 05:21:55 UTC (rev 371) @@ -59,6 +59,7 @@ extern client_name_t tcp_clients_name[]; /*_____________________ F U N C T I O N S __________________________________*/ +extern int tcp_server_init(void); extern void tcp_server_loop(void); extern void tcp_server_send_raw(const tcp_frame_t data); extern void tcp_server_send_raw_to_client(int client_index, Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-06-12 04:56:15 UTC (rev 370) +++ daemon/trunk/main.c 2007-06-12 05:21:55 UTC (rev 371) @@ -397,7 +397,9 @@ if (drop_privileges() < 0) exit(1); - /* Main loop */ + if (tcp_server_init() < 0) + exit(1); + tcp_server_loop(); exit(0); |