From a55fc6a97340fb8a42eab82f97f1693971e75567 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Sun, 30 Jun 2013 05:00:15 +0000 Subject: Simplify 'server' definition and use. --- src/lib/sockio-c.c | 132 ++++++++++++++++++++--------------------------------- 1 file changed, 50 insertions(+), 82 deletions(-) (limited to 'src/lib') diff --git a/src/lib/sockio-c.c b/src/lib/sockio-c.c index d44eb818..24b8f475 100644 --- a/src/lib/sockio-c.c +++ b/src/lib/sockio-c.c @@ -82,8 +82,8 @@ namespace OpenAxiom { /* socket description of spad clients */ openaxiom_sio clients[MaxClients]; -/* AF_LOCAL and AF_INET sockets for server */ -openaxiom_sio server[2]; +/* Local socket for server */ +openaxiom_sio server; /* table of dedicated socket types */ openaxiom_sio *purpose_table[TotalMaxPurposes]; @@ -990,8 +990,8 @@ connect_to_local_server_new(const char *server_name, int purpose, int time_out) return NULL; } - memset(server[1].addr.u_addr.sa_data, 0, - sizeof(server[1].addr.u_addr.sa_data)); + memset(server.addr.u_addr.sa_data, 0, + sizeof(server.addr.u_addr.sa_data)); sock->addr.u_addr.sa_family = OPENAXIOM_AF_LOCAL; strcpy(sock->addr.u_addr.sa_data, name); for(i=0; iaddr.u_addr.sa_family = OPENAXIOM_AF_LOCAL; strcpy(sock->addr.u_addr.sa_data, name); for(i=0; isocket,&rd); FD_SET(0, &rd); - len = sselect(FD_SETSIZE, (fd_set *)&rd, (fd_set *)0, (fd_set *)0, NULL); + len = sselect(FD_SETSIZE, &rd, nullptr, nullptr, NULL); if (len == -1) { perror("stdio select"); return; @@ -1156,16 +1156,15 @@ make_server_name(char *name, const char* base) static void init_socks() { - int i; FD_ZERO(&socket_mask); FD_ZERO(&server_mask); init_purpose_table(); - for(i=0; i<2; i++) server[i].socket = 0; - for(i=0; ipid = get_int(sock); + sock->purpose = get_int(sock); + sock->remote = get_int(sock); + send_int(sock, oa_getpid()); + send_int(sock, sock->socket); + purpose_table[sock->purpose] = sock; +} + OPENAXIOM_C_EXPORT int -accept_connection(openaxiom_sio *sock) +accept_connection() { - int client; - for(client=0; clientsocket, 0, 0); + clients[client].socket = accept(server.socket, 0, 0); if (is_invalid_socket(&clients[client])) { perror("accept_connection"); clients[client].socket = 0; return -1; } FD_SET(clients[client].socket, &socket_mask); - get_socket_type(clients+client); + get_socket_type(&clients[client]); return clients[client].purpose; } -/* reads a the socket purpose declaration for classification */ -OPENAXIOM_C_EXPORT void -get_socket_type(openaxiom_sio *sock) -{ - sock->pid = get_int(sock); - sock->purpose = get_int(sock); - sock->remote = get_int(sock); - send_int(sock, oa_getpid()); - send_int(sock, sock->socket); - purpose_table[sock->purpose] = sock; -} - OPENAXIOM_C_EXPORT int sock_accept_connection(int purpose) { fd_set rd; - int ret_val, i, p; + int ret_val, p; if (oa_getenv("SPADNUM") == NULL) return -1; while (1) { rd = server_mask; - ret_val = sselect(FD_SETSIZE, (fd_set *)&rd, (fd_set *)0, (fd_set *)0, NULL); + ret_val = sselect(FD_SETSIZE, &rd, nullptr, nullptr, NULL); if (ret_val == -1) { perror ("Select"); return -1; } - for(i=0; i<2; i++) { - if (is_valid_socket(&server[i]) - && FD_ISSET(server[i].socket, &rd)) { - p = accept_connection(server+i); - if (p == purpose) return 1; - } + if (is_valid_socket(&server) && FD_ISSET(server.socket, &rd)) { + p = accept_connection(); + if (p == purpose) return 1; } } } @@ -1292,7 +1263,7 @@ sock_accept_connection(int purpose) OPENAXIOM_C_EXPORT int server_switch() { - int ret_val, i, cmd = 0; + int ret_val, cmd = 0; fd_set rd, wr, ex, fds_mask; FD_ZERO(&rd); FD_ZERO(&wr); @@ -1314,11 +1285,8 @@ server_switch() /* perror ("Select in switch"); */ return -1; } - for(i=0; i<2; i++) { - if (is_valid_socket(&server[i]) - && (FD_ISSET(server[i].socket, &rd))) - accept_connection(server+i); - } + if (is_valid_socket(&server) && FD_ISSET(server.socket, &rd)) + accept_connection(); } while (purpose_table[SessionManager] == NULL); FD_SET(purpose_table[SessionManager]->socket, &fds_mask); if (FD_ISSET(purpose_table[SessionManager]->socket, &rd)) { -- cgit v1.2.3