|
|
| version 1.28.2.3, 2016/08/02 12:00:39 | version 1.29.2.1, 2020/06/25 19:08:42 |
|---|---|
| Line 424 acceptClients(sched_task_t *task) | Line 424 acceptClients(sched_task_t *task) |
| AIT_FREE_VAL(&c->cli_buf); | AIT_FREE_VAL(&c->cli_buf); |
| array_Del(srv->srv_clients, c->cli_id, 42); | array_Del(srv->srv_clients, c->cli_id, 42); |
| goto end; | goto end; |
| } 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); |
| fcntl(c->cli_sock, F_SETFD, FD_CLOEXEC); | |
| } | |
| #ifdef TCP_SESSION_TIMEOUT | #ifdef TCP_SESSION_TIMEOUT |
| /* armed timer for close stateless connection */ | /* armed timer for close stateless connection */ |
| Line 498 txUDPPacket(sched_task_t *task) | Line 500 txUDPPacket(sched_task_t *task) |
| /* send reply */ | /* send reply */ |
| ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, | ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, |
| &c->cli_sa.sa, sizeof c->cli_sa.sa); | &c->cli_sa.sa, e_addrlen(&c->cli_sa)); |
| if (ret == -1) { | if (ret == -1) { |
| /* close connection */ | /* close connection */ |
| schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], | schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], |
| Line 640 txRAWPacket(sched_task_t *task) | Line 642 txRAWPacket(sched_task_t *task) |
| /* send reply */ | /* send reply */ |
| ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, | ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, |
| &c->cli_sa.sa, sizeof c->cli_sa.sa); | &c->cli_sa.sa, e_addrlen(&c->cli_sa)); |
| if (ret == -1) { | if (ret == -1) { |
| /* close connection */ | /* close connection */ |
| schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], | schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], |
| Line 679 rxRAWPacket(sched_task_t *task) | Line 681 rxRAWPacket(sched_task_t *task) |
| rpc = (struct tagRPCCall*) (h + 1); | rpc = (struct tagRPCCall*) (h + 1); |
| } | } |
| } else { | } else { |
| #ifdef IPV6_REMOVE_HEADER | |
| struct ip6_hdr *h; | struct ip6_hdr *h; |
| h = (struct ip6_hdr*) AIT_GET_BUF(&b); | h = (struct ip6_hdr*) AIT_GET_BUF(&b); |
| if (rlen < (ntohs(h->ip6_plen) + sizeof(struct ip6_hdr)) || | if (rlen < ntohs(h->ip6_plen) || h->ip6_nxt != IPPROTO_ERPC) |
| h->ip6_nxt != IPPROTO_ERPC) | |
| goto end; | goto end; |
| else { | else { |
| rlen -= sizeof(struct ip6_hdr); | rlen -= sizeof(struct ip6_hdr); |
| rpc = (struct tagRPCCall*) (h + 1); | rpc = (struct tagRPCCall*) (h + 1); |
| } | } |
| #else | |
| rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); | |
| #endif | |
| } | } |
| if (rlen < sizeof(struct tagRPCCall)) | if (rlen < sizeof(struct tagRPCCall)) |
| goto end; | goto end; |
| Line 1194 flushBLOB(sched_task_t *task) | Line 1199 flushBLOB(sched_task_t *task) |
| e_free(b); | e_free(b); |
| } | } |
| if (!schedSignalSelf(task)) { | if (sigArg) { |
| /* disabled kqueue support in libaitsched */ | /* disabled kqueue support in libaitsched */ |
| struct sigaction sa; | struct sigaction sa; |
| Line 1203 flushBLOB(sched_task_t *task) | Line 1208 flushBLOB(sched_task_t *task) |
| sa.sa_handler = (void (*)(int)) flushBLOB; | sa.sa_handler = (void (*)(int)) flushBLOB; |
| sa.sa_flags = SA_RESTART | SA_RESETHAND; | sa.sa_flags = SA_RESTART | SA_RESETHAND; |
| sigaction(SIGFBLOB, &sa, NULL); | sigaction(SIGFBLOB, &sa, NULL); |
| return NULL; | |
| } else { | |
| schedSignalSelf(task); | |
| taskExit(task, NULL); | |
| } | } |
| taskExit(task, NULL); | |
| } | } |
| static void * | static void * |
| Line 1259 acceptBLOBClients(sched_task_t *task) | Line 1266 acceptBLOBClients(sched_task_t *task) |
| setsockopt(c->cli_sock, IPPROTO_TCP, TCP_NOPUSH, &n, sizeof n); | setsockopt(c->cli_sock, IPPROTO_TCP, TCP_NOPUSH, &n, sizeof n); |
| #endif | #endif |
| 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); |
| fcntl(c->cli_sock, F_SETFD, FD_CLOEXEC); | |
| } | } |
| schedRead(TASK_ROOT(task), rxBLOB, c, c->cli_sock, NULL, 0); | schedRead(TASK_ROOT(task), rxBLOB, c, c->cli_sock, NULL, 0); |
| Line 1300 rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s | Line 1308 rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s |
| srv->srv_blob.server.cli_parent = srv; | srv->srv_blob.server.cli_parent = srv; |
| memcpy(&srv->srv_blob.server.cli_sa, &srv->srv_server.cli_sa, sizeof(sockaddr_t)); | memcpy(&srv->srv_blob.server.cli_sa, &srv->srv_server.cli_sa, sizeof srv->srv_blob.server.cli_sa); |
| switch (srv->srv_blob.server.cli_sa.sa.sa_family) { | switch (srv->srv_blob.server.cli_sa.sa.sa_family) { |
| case AF_INET: | case AF_INET: |
| srv->srv_blob.server.cli_sa.sin.sin_port = | srv->srv_blob.server.cli_sa.sin.sin_port = |