|
|
| version 1.20.4.1, 2013/11/13 12:18:14 | version 1.21, 2013/11/14 21:44:14 |
|---|---|
| Line 165 txPacket(sched_task_t *task) | Line 165 txPacket(sched_task_t *task) |
| struct tagRPCCall *rpc = (struct tagRPCCall*) buf; | struct tagRPCCall *rpc = (struct tagRPCCall*) buf; |
| int ret, estlen, wlen = sizeof(struct tagRPCCall); | int ret, estlen, wlen = sizeof(struct tagRPCCall); |
| struct pollfd pfd; | struct pollfd pfd; |
| #ifdef TCP_SESSION_TIMEOUT | |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | |
| schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_DATA, TASK_ARG(task), NULL); | |
| schedTimer(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], | |
| TASK_ARG(task), ts, TASK_ARG(task), 0); | |
| #endif | |
| if (rpc->call_argc) { | if (rpc->call_argc) { |
| f = rpc_srv_getCall(s, ntohs(rpc->call_tag)); | f = rpc_srv_getCall(s, ntohs(rpc->call_tag)); |
| if (!f) { | if (!f) { |
| Line 305 rxPacket(sched_task_t *task) | Line 312 rxPacket(sched_task_t *task) |
| u_char *buf = AIT_GET_BUF(&c->cli_buf); | u_char *buf = AIT_GET_BUF(&c->cli_buf); |
| struct tagRPCCall *rpc = (struct tagRPCCall*) buf; | struct tagRPCCall *rpc = (struct tagRPCCall*) buf; |
| struct pollfd pfd; | struct pollfd pfd; |
| #ifdef TCP_SESSION_TIMEOUT | |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | |
| schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_DATA, TASK_ARG(task), NULL); | |
| schedTimer(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], | |
| TASK_ARG(task), ts, TASK_ARG(task), 0); | |
| #endif | |
| memset(buf, 0, sizeof(struct tagRPCCall)); | memset(buf, 0, sizeof(struct tagRPCCall)); |
| rlen = recv(TASK_FD(task), rpc, sizeof(struct tagRPCCall), MSG_PEEK); | rlen = recv(TASK_FD(task), rpc, sizeof(struct tagRPCCall), MSG_PEEK); |
| if (rlen < sizeof(struct tagRPCCall)) { | if (rlen < sizeof(struct tagRPCCall)) { |
| Line 387 acceptClients(sched_task_t *task) | Line 401 acceptClients(sched_task_t *task) |
| rpc_cli_t *c = NULL; | rpc_cli_t *c = NULL; |
| socklen_t salen = sizeof(sockaddr_t); | socklen_t salen = sizeof(sockaddr_t); |
| int sock; | int sock; |
| #ifdef TCP_SESSION_TIMEOUT | |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | |
| #endif | |
| c = _allocClient(srv, NULL); | c = _allocClient(srv, NULL); |
| if (!c) { | if (!c) { |
| Line 408 acceptClients(sched_task_t *task) | Line 425 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); |
| #ifdef TCP_SESSION_TIMEOUT | |
| /* armed timer for close stateless connection */ | |
| schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_DATA, c, NULL); | |
| schedTimer(TASK_ROOT(task), cbProto[srv->srv_proto][CB_CLOSECLIENT], c, | |
| ts, c, 0); | |
| #endif | |
| schedRead(TASK_ROOT(task), cbProto[srv->srv_proto][CB_RXPACKET], c, | schedRead(TASK_ROOT(task), cbProto[srv->srv_proto][CB_RXPACKET], c, |
| c->cli_sock, NULL, 0); | c->cli_sock, NULL, 0); |
| end: | end: |
| Line 728 acceptBLOBClients(sched_task_t *task) | Line 751 acceptBLOBClients(sched_task_t *task) |
| for (i = 0; i < array_Size(srv->srv_blob.clients) && | for (i = 0; i < array_Size(srv->srv_blob.clients) && |
| (c = array(srv->srv_blob.clients, i, rpc_cli_t*)); i++); | (c = array(srv->srv_blob.clients, i, rpc_cli_t*)); i++); |
| if (c) { /* no more free slots! */ | if (c) { /* no more free slots! */ |
| EVERBOSE(1, "RPC client quota exceeded! Connection will be shutdown!\n"); | EVERBOSE(1, "BLOB client quota exceeded! Connection will be shutdown!\n"); |
| if ((sock = accept(TASK_FD(task), NULL, NULL)) != -1) { | if ((sock = accept(TASK_FD(task), NULL, NULL)) != -1) { |
| shutdown(sock, SHUT_RDWR); | shutdown(sock, SHUT_RDWR); |
| close(sock); | close(sock); |