[tuxdroid-svn] r241 - svnlook: warning: cannot set LC_CTYPE locale svnlook: warning: environment va
Status: Beta
Brought to you by:
ks156
From: svnlook:warning@affinitic.be:cannot s. L. l. <c2m...@c2...> - 2007-04-11 19:41:22
|
Author: svnlook: warning: cannot set LC_CTYPE locale Date: svnlook: warning: environment variable LANG is EN New Revision: 241 Modified: daemon/trunk/libs/USBDaemon_tcp_server.c Log: neimad 2007-04-11 21:41:17 +0200 (Wed, 11 Apr 2007) 228 * Fixed the client handling loop: replaced O_NONBLOCK+recv()+usleep() with select()+recv(). I left the locking untouched. And there are still usleep() calls in in several places. We should eventually get tid of them all. svnlook: warning: cannot set LC_CTYPE locale svnlook: warning: environment variable LANG is EN svnlook: warning: please check that your locale name is correct Modified: daemon/trunk/libs/USBDaemon_tcp_server.c =================================================================== --- daemon/trunk/libs/USBDaemon_tcp_server.c 2007-04-11 19:38:19 UTC (rev 240) +++ daemon/trunk/libs/USBDaemon_tcp_server.c 2007-04-11 19:41:17 UTC (rev 241) @@ -25,7 +25,8 @@ #include <sys/types.h> #include <unistd.h> #include <fcntl.h> -#include <sys/poll.h> +#include <sys/select.h> +#include <errno.h> #include "USBDaemon_globals.h" #include "USBDaemon_command_tux.h" #include "USBDaemon_status_table.h" @@ -47,12 +48,7 @@ /************************************************************************ */ void tcp_server_start_task() { - int tmp_client; - int client_added; tcp_frame_t datas_recv; - int i; - int rt_read; - int tmp_handle; int val; pthread_mutex_init(&tcp_mutex, NULL); @@ -92,64 +88,93 @@ } printf("TCP socket : opened\n"); tux_tcp_status = TUX_TCP_STATUS_UP; - fcntl(tcp_server_handle, F_SETFL, O_NONBLOCK); - while(tcp_server_handle) + + while (tcp_server_handle >= 0) { + fd_set rset; + int i, r, fdmax; + + FD_ZERO(&rset); + FD_SET(tcp_server_handle, &rset); + fdmax = tcp_server_handle; + /* Client connection */ pthread_mutex_lock(&tcp_mutex); - tmp_client = accept(tcp_server_handle, (struct sockaddr *)NULL, NULL); - if (tmp_client >= 0) + for (i = 0; i < TUX_MAX_TCP_CLIENTS; i++) + if (tcp_clients_handle[i] >= 0) + { + FD_SET(tcp_clients_handle[i], &rset); + if (tcp_clients_handle[i] > fdmax) + fdmax = tcp_clients_handle[i]; + } + pthread_mutex_unlock(&tcp_mutex); + + r = select(fdmax + 1, &rset, NULL, NULL, NULL); + if (r < 0) { - fcntl(tmp_client, F_SETFL, O_NONBLOCK); - printf("TCP socket : accept OK\n"); + if (errno == EINTR) + continue; + break; + } - client_added = 0; - for (i = 0; i < TUX_MAX_TCP_CLIENTS; i++) + /* Incoming connection request ? */ + pthread_mutex_lock(&tcp_mutex); + if (FD_ISSET(tcp_server_handle, &rset)) + { + int tmp_client = + accept(tcp_server_handle, (struct sockaddr *)NULL, NULL); + + if (tmp_client < 0) + fprintf(stderr, "accept failed: %m\n"); + else { - if (tcp_clients_handle[i] < 0) + int client_added = 0; + + for (i = 0; i < TUX_MAX_TCP_CLIENTS; i++) + if (tcp_clients_handle[i] < 0) + { + tcp_clients_handle[i] = tmp_client; + tcp_clients_count++; + client_added = 1; + break; + } + + if (client_added) + printf("client %d connected\n", i); + else { - tcp_clients_handle[i] = tmp_client; - tcp_clients_count++; - client_added = 1; - break; + fprintf(stderr, "client rejected: client table full\n"); + close(tmp_client); } } - - if (!client_added) - { - printf("TCP socket : client not accepted : client table is full\n"); - close(tmp_handle); - } } /* Receive messages from clients */ for (i = 0; i < TUX_MAX_TCP_CLIENTS; i++) { - if (tcp_clients_handle[i] >= 0) + int r; + + if (tcp_clients_handle[i] < 0 + || !FD_ISSET(tcp_clients_handle[i], &rset)) + continue; + + r = recv(tcp_clients_handle[i], datas_recv, sizeof(datas_recv), 0); + if (r == 0) { - rt_read = recv(tcp_clients_handle[i], datas_recv, sizeof(datas_recv), 0); - if (rt_read == 0) - { - close(tcp_clients_handle[i]); - tcp_clients_handle[i] = -1; - tcp_clients_count--; - printf("TCP socket : Client %d is disconnected READ\n", i); - } - else if (rt_read > 0) - { - pthread_mutex_unlock(&tcp_mutex); - commands_dispatcher((unsigned char)i, datas_recv); - pthread_mutex_lock(&tcp_mutex); - } + close(tcp_clients_handle[i]); + tcp_clients_handle[i] = -1; + tcp_clients_count--; + printf("TCP socket : Client %d is disconnected READ\n", i); } - - pthread_mutex_unlock(&tcp_mutex); - usleep(1000); - pthread_mutex_lock(&tcp_mutex); + else if (r > 0) + { + pthread_mutex_unlock(&tcp_mutex); + commands_dispatcher((unsigned char)i, datas_recv); + pthread_mutex_lock(&tcp_mutex); + } } pthread_mutex_unlock(&tcp_mutex); - usleep(1000); } } |