--- libaitrpc/src/srv.c 2016/08/02 12:00:39 1.28.2.3 +++ libaitrpc/src/srv.c 2016/08/02 15:18:41 1.28.2.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.28.2.3 2016/08/02 12:00:39 misho Exp $ +* $Id: srv.c,v 1.28.2.4 2016/08/02 15:18:41 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -498,7 +498,7 @@ txUDPPacket(sched_task_t *task) /* send reply */ 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) { /* close connection */ schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], @@ -640,7 +640,7 @@ txRAWPacket(sched_task_t *task) /* send reply */ 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) { /* close connection */ schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], @@ -679,15 +679,18 @@ rxRAWPacket(sched_task_t *task) rpc = (struct tagRPCCall*) (h + 1); } } else { +#ifdef IPV6_REMOVE_HEADER struct ip6_hdr *h; h = (struct ip6_hdr*) AIT_GET_BUF(&b); - if (rlen < (ntohs(h->ip6_plen) + sizeof(struct ip6_hdr)) || - h->ip6_nxt != IPPROTO_ERPC) + if (rlen < ntohs(h->ip6_plen) || h->ip6_nxt != IPPROTO_ERPC) goto end; else { rlen -= sizeof(struct ip6_hdr); rpc = (struct tagRPCCall*) (h + 1); } +#else + rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); +#endif } if (rlen < sizeof(struct tagRPCCall)) goto end; @@ -1300,7 +1303,7 @@ rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s 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) { case AF_INET: srv->srv_blob.server.cli_sa.sin.sin_port =