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; |