--- libaitrpc/src/srv.c 2012/05/16 09:02:48 1.9.2.12 +++ libaitrpc/src/srv.c 2012/05/16 09:09:42 1.9.2.13 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.9.2.12 2012/05/16 09:02:48 misho Exp $ +* $Id: srv.c,v 1.9.2.13 2012/05/16 09:09:42 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -257,7 +257,7 @@ acceptClients(sched_task_t *task) c = malloc(sizeof(rpc_cli_t)); if (!c) { LOGERR; - srv->srv_kill = kill; + srv->srv_kill = 1; return NULL; } else { memset(c, 0, sizeof(rpc_cli_t)); @@ -270,7 +270,7 @@ acceptClients(sched_task_t *task) AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf); /* accept client */ - c->cli_sock = accept(srv->srv_server.cli_sock, &c->cli_sa.sa, &salen); + c->cli_sock = accept(TASK_FD(task), &c->cli_sa.sa, &salen); if (c->cli_sock == -1) { LOGERR; AIT_FREE_VAL(&c->cli_buf); @@ -287,50 +287,6 @@ end: /* ------------------------------------------------------ */ -static void * -acceptBLOBClients(sched_task_t *task) -{ - rpc_srv_t *srv = TASK_ARG(task); - rpc_cli_t *c = NULL; - register int i; - socklen_t salen = sizeof(io_sockaddr_t); - - /* check free slots for connect */ - for (i = 0; i < io_arraySize(srv->srv_clients) && - (c = io_array(srv->srv_clients, i, rpc_cli_t*)); i++); - if (c) /* no more free slots! */ - goto end; - c = malloc(sizeof(rpc_cli_t)); - if (!c) { - LOGERR; - srv->srv_kill = kill; - return NULL; - } else { - memset(c, 0, sizeof(rpc_cli_t)); - io_arraySet(srv->srv_clients, i, c); - c->cli_id = i; - c->cli_parent = srv; - } - - /* alloc empty buffer */ - AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf); - - /* accept client */ - c->cli_sock = accept(srv->srv_server.cli_sock, &c->cli_sa.sa, &salen); - if (c->cli_sock == -1) { - LOGERR; - AIT_FREE_VAL(&c->cli_buf); - io_arrayDel(srv->srv_clients, i, 42); - goto end; - } else - fcntl(c->cli_sock, F_SETFL, fcntl(c->cli_sock, F_GETFL) | O_NONBLOCK); - - schedRead(TASK_ROOT(task), rxPacket, c, c->cli_sock, NULL, 0); -end: - schedReadSelf(task); - return NULL; -} - #if 0 static void * txBLOB(sched_task_t *task) @@ -469,51 +425,51 @@ end: TASK_DATA(task), TASK_DATLEN(task)); return NULL; } +#endif static void * -rpc_srv_dispatchVars(void *arg) +acceptBLOBClients(sched_task_t *task) { - rpc_cli_t *c = arg; - rpc_srv_t *s; - sched_root_task_t *root; - u_char *buf; - struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; + rpc_srv_t *srv = TASK_ARG(task); + rpc_cli_t *c = NULL; + register int i; + socklen_t salen = sizeof(io_sockaddr_t); - if (!arg) { - rpc_SetErr(EINVAL, "Invalid parameter can`t procced BLOB"); - return NULL; - } else - s = c->cli_parent; - - /* allocate net buffer */ - buf = malloc(sizeof(struct tagBLOBHdr)); - if (!buf) { + /* check free slots for connect */ + for (i = 0; i < io_arraySize(srv->srv_blob.clients) && + (c = io_array(srv->srv_blob.clients, i, rpc_cli_t*)); i++); + if (c) /* no more free slots! */ + goto end; + c = malloc(sizeof(rpc_cli_t)); + if (!c) { LOGERR; + srv->srv_kill = srv->srv_blob.kill = 1; return NULL; - } - - root = schedBegin(); - if (!root) { - rpc_SetErr(sched_GetErrno(), "%s", sched_GetError()); - free(buf); - return NULL; } else { - schedTermCondition(root, kill); - schedPolling(root, &ts, NULL); + memset(c, 0, sizeof(rpc_cli_t)); + io_arraySet(srv->srv_blob.clients, i, c); + c->cli_id = i; + c->cli_parent = srv; } - schedRead(root, rxBLOB, c, c->cli_sock, buf, sizeof(struct tagBLOBHdr)); + /* alloc empty buffer */ + AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf); - schedRun(root, (void*) &c->cli_kill); - schedEnd(&root); + /* accept client */ + c->cli_sock = accept(TASK_FD(task), &c->cli_sa.sa, &salen); + if (c->cli_sock == -1) { + LOGERR; + AIT_FREE_VAL(&c->cli_buf); + io_arrayDel(srv->srv_blob.clients, i, 42); + goto end; + } else + fcntl(c->cli_sock, F_SETFL, fcntl(c->cli_sock, F_GETFL) | O_NONBLOCK); - shutdown(c->cli_sock, SHUT_RDWR); - close(c->cli_sock); - memset(c, 0, sizeof(rpc_cli_t)); - free(buf); +// schedRead(TASK_ROOT(task), rxBLOB, c, c->cli_sock, NULL, 0); +end: + schedReadSelf(task); return NULL; } -#endif /* ------------------------------------------------------ */