--- libaitrpc/src/aitrpc.c 2016/08/02 10:13:32 1.20.2.1 +++ libaitrpc/src/aitrpc.c 2016/08/02 15:18:41 1.20.2.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitrpc.c,v 1.20.2.1 2016/08/02 10:13:32 misho Exp $ +* $Id: aitrpc.c,v 1.20.2.4 2016/08/02 15:18:41 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -153,8 +153,9 @@ try2read: pfd.events = POLLIN | POLLPRI; memset(buf, 0, blen); memset(&sa2, 0, sizeof sa2); + salen = E_SOCKADDR_MAX; #ifndef __linux__ - salen = sa2.ss.ss_len = (u_char) MIN(sizeof(sockaddr_t), 0xff); + sa2.ss.ss_len = salen; #endif if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 || pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) { @@ -253,8 +254,13 @@ try2read: /* check RPC packet header */ if (type == SOCK_RAW) { +#ifdef IPV6_REMOVE_HEADER hlen = sa->sa.sa_family == AF_INET ? sizeof(struct ip) : sizeof(struct ip6_hdr); +#else + hlen = sa->sa.sa_family == AF_INET ? + sizeof(struct ip) : 0; +#endif ret -= hlen; if (ret > 0) memmove(buf, buf + hlen, blen - hlen); @@ -348,7 +354,7 @@ rpc_Write(int sock, int type, int flags, sockaddr_t * return -1; } - ret = sendto(sock, buf, blen, flags, &sa->sa, sizeof sa->sa); + ret = sendto(sock, buf, blen, flags, &sa->sa, e_addrlen(sa)); break; default: rpc_SetErr(EINVAL, "Invalid argument(s)!");