|
version 1.12.2.1, 2012/11/16 08:33:06
|
version 1.12.2.2, 2012/11/16 08:51:36
|
|
Line 46 SUCH DAMAGE.
|
Line 46 SUCH DAMAGE.
|
| #include "global.h" |
#include "global.h" |
| |
|
| |
|
| |
/* SOCK_STREAM */ |
| static void *acceptClients(sched_task_t *); |
static void *acceptClients(sched_task_t *); |
| static void *closeClient(sched_task_t *); |
static void *closeClient(sched_task_t *); |
| static sched_task_func_t cbProto[SOCK_RAW][2] = { | static void *rxPacket(sched_task_t *); |
| { acceptClients, closeClient }, | static void *txPacket(sched_task_t *); |
| { acceptClients, closeClient }, | |
| { NULL, NULL } | /* SOCK_DGRAM */ |
| | |
| | /* SOCK_RAW */ |
| | |
| | static sched_task_func_t cbProto[SOCK_RAW + 1][4] = { |
| | { acceptClients, closeClient, rxPacket, txPacket }, /* SOCK_STREAM */ |
| | { acceptClients, closeClient, rxPacket, txPacket }, /* SOCK_STREAM */ |
| | { NULL, NULL, NULL, NULL }, |
| | { NULL, NULL, NULL, NULL } /* SOCK_RAW */ |
| }; |
}; |
| |
|
| |
|
|
Line 197 rxPacket(sched_task_t *task)
|
Line 206 rxPacket(sched_task_t *task)
|
| |
|
| if (!off) |
if (!off) |
| memset(buf, 0, AIT_LEN(&c->cli_buf)); |
memset(buf, 0, AIT_LEN(&c->cli_buf)); |
| else | // else |
| memmove(buf, buf + off, AIT_LEN(&c->cli_buf) - off); | // memmove(buf, buf + off, AIT_LEN(&c->cli_buf) - off); |
| rlen = recv(TASK_FD(task), buf + off, AIT_LEN(&c->cli_buf) - off, 0); |
rlen = recv(TASK_FD(task), buf + off, AIT_LEN(&c->cli_buf) - off, 0); |
| if (rlen < 1) { |
if (rlen < 1) { |
| /* close connection */ |
/* close connection */ |
|
Line 258 rxPacket(sched_task_t *task)
|
Line 267 rxPacket(sched_task_t *task)
|
| |
|
| /* send RPC reply */ |
/* send RPC reply */ |
| if (!noreply) |
if (!noreply) |
| schedWrite(TASK_ROOT(task), txPacket, TASK_ARG(task), TASK_FD(task), rpc, len); | schedWrite(TASK_ROOT(task), cbProto[s->srv_proto][CB_TXPACKET], |
| | TASK_ARG(task), TASK_FD(task), rpc, len); |
| |
|
| off += len; |
off += len; |
| } while (rlen > 0); |
} while (rlen > 0); |
|
Line 306 acceptClients(sched_task_t *task)
|
Line 316 acceptClients(sched_task_t *task)
|
| } else |
} else |
| fcntl(c->cli_sock, F_SETFL, fcntl(c->cli_sock, F_GETFL) | O_NONBLOCK); |
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); | schedRead(TASK_ROOT(task), cbProto[srv->srv_proto][CB_RXPACKET], c, |
| | c->cli_sock, NULL, 0); |
| end: |
end: |
| schedReadSelf(task); |
schedReadSelf(task); |
| return NULL; |
return NULL; |