|
version 1.27.2.2, 2015/07/02 23:21:06
|
version 1.28.2.1, 2016/06/23 15:59:52
|
|
Line 312 rxPacket(sched_task_t *task)
|
Line 312 rxPacket(sched_task_t *task)
|
| u_short crc; |
u_short crc; |
| #endif |
#endif |
| u_char *buf = AIT_GET_BUF(&c->cli_buf); |
u_char *buf = AIT_GET_BUF(&c->cli_buf); |
| u_char b[sizeof(struct tagRPCCall)]; | struct tagRPCCall b, *rpc = (struct tagRPCCall*) buf; |
| struct tagRPCCall *rpc = (struct tagRPCCall*) buf; | |
| #ifdef TCP_SESSION_TIMEOUT |
#ifdef TCP_SESSION_TIMEOUT |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; |
struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; |
| |
|
|
Line 323 rxPacket(sched_task_t *task)
|
Line 322 rxPacket(sched_task_t *task)
|
| #endif |
#endif |
| |
|
| /* prepare rx */ |
/* prepare rx */ |
| len = recv(TASK_FD(task), b, sizeof b, MSG_PEEK); | len = recv(TASK_FD(task), &b, sizeof b, MSG_PEEK); |
| if (len == sizeof b) |
if (len == sizeof b) |
| rlen = ntohl(((struct tagRPCCall*) b)->call_len); | rlen = ntohl(b.call_len); |
| |
|
| rlen = recv(TASK_FD(task), buf, rlen, 0); |
rlen = recv(TASK_FD(task), buf, rlen, 0); |
| if (rlen == -1) { |
if (rlen == -1) { |
|
Line 524 rxUDPPacket(sched_task_t *task)
|
Line 523 rxUDPPacket(sched_task_t *task)
|
| |
|
| /* receive connect packet */ |
/* receive connect packet */ |
| AIT_SET_BUF(&b, NULL, srv->srv_netbuf); |
AIT_SET_BUF(&b, NULL, srv->srv_netbuf); |
| salen = sa.ss.ss_len = (u_char) sizeof(sockaddr_t); | salen = sa.ss.ss_len = (u_char) MIN(sizeof(sockaddr_t), 0xff); |
| rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen); |
rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen); |
| rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); |
rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); |
| if (rlen < sizeof(struct tagRPCCall)) |
if (rlen < sizeof(struct tagRPCCall)) |
|
Line 664 rxRAWPacket(sched_task_t *task)
|
Line 663 rxRAWPacket(sched_task_t *task)
|
| |
|
| /* receive connect packet */ |
/* receive connect packet */ |
| AIT_SET_BUF(&b, NULL, srv->srv_netbuf); |
AIT_SET_BUF(&b, NULL, srv->srv_netbuf); |
| salen = sa.ss.ss_len = (u_char) sizeof(sockaddr_t); | salen = sa.ss.ss_len = (u_char) MIN(sizeof(sockaddr_t), 0xff); |
| rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen); |
rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen); |
| if (sa.sa.sa_family == AF_INET) { |
if (sa.sa.sa_family == AF_INET) { |
| struct ip *h; |
struct ip *h; |
|
Line 1167 end:
|
Line 1166 end:
|
| static void * |
static void * |
| flushBLOB(sched_task_t *task) |
flushBLOB(sched_task_t *task) |
| { |
{ |
| #ifndef atomic_load_acq_ptr | #ifdef atomic_load_acq_ptr |
| uintptr_t sigArg = atomic_load_acq_ptr(&_glSigArg); |
uintptr_t sigArg = atomic_load_acq_ptr(&_glSigArg); |
| #else |
#else |
| uintptr_t sigArg = *((volatile uintptr_t*) &_glSigArg); |
uintptr_t sigArg = *((volatile uintptr_t*) &_glSigArg); |
|
Line 1379 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv)
|
Line 1378 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv)
|
| |
|
| srv->srv_blob.kill = 1; |
srv->srv_blob.kill = 1; |
| |
|
| schedEnd(&srv->srv_blob.root); |
|
| |
|
| if (srv->srv_blob.server.cli_sa.sa.sa_family == AF_LOCAL) |
if (srv->srv_blob.server.cli_sa.sa.sa_family == AF_LOCAL) |
| unlink(srv->srv_blob.server.cli_sa.sun.sun_path); |
unlink(srv->srv_blob.server.cli_sa.sun.sun_path); |
| |
|
| |
schedEnd(&srv->srv_blob.root); |
| } |
} |
| |
|
| /* |
/* |
|
Line 1413 rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
|
Line 1412 rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
|
| /* disabled kqueue support in libaitsched */ |
/* disabled kqueue support in libaitsched */ |
| struct sigaction sa; |
struct sigaction sa; |
| |
|
| #ifndef atomic_store_rel_ptr | #ifdef atomic_store_rel_ptr |
| atomic_store_rel_ptr(&_glSigArg, (uintptr_t) srv); |
atomic_store_rel_ptr(&_glSigArg, (uintptr_t) srv); |
| #else |
#else |
| *((volatile uintptr_t*) &_glSigArg) = (uintptr_t) srv; |
*((volatile uintptr_t*) &_glSigArg) = (uintptr_t) srv; |
|
Line 1606 rpc_srv_endServer(rpc_srv_t ** __restrict psrv)
|
Line 1605 rpc_srv_endServer(rpc_srv_t ** __restrict psrv)
|
| |
|
| /* if send kill to blob server */ |
/* if send kill to blob server */ |
| rpc_srv_endBLOBServer(*psrv); |
rpc_srv_endBLOBServer(*psrv); |
| |
/* wait for BLOB server done */ |
| |
while (*(&(*psrv)->srv_blob.root)) |
| |
usleep(1000); |
| |
|
| (*psrv)->srv_kill = 1; |
(*psrv)->srv_kill = 1; |
| sleep(RPC_SCHED_POLLING); |
sleep(RPC_SCHED_POLLING); |
| |
|
| schedEnd(&(*psrv)->srv_root); |
|
| |
|
| if ((*psrv)->srv_server.cli_sa.sa.sa_family == AF_LOCAL) |
if ((*psrv)->srv_server.cli_sa.sa.sa_family == AF_LOCAL) |
| unlink((*psrv)->srv_server.cli_sa.sun.sun_path); |
unlink((*psrv)->srv_server.cli_sa.sun.sun_path); |
| |
|
| |
schedEnd(&(*psrv)->srv_root); |
| |
|
| pthread_mutex_destroy(&(*psrv)->srv_funcs.mtx); |
pthread_mutex_destroy(&(*psrv)->srv_funcs.mtx); |
| e_free(*psrv); |
e_free(*psrv); |