--- nfs_cast.orig.c 2007-05-03 02:25:44.000000000 +0000 +++ nfs_cast.c 2008-04-10 14:40:48.000000000 +0000 @@ -354,15 +354,26 @@ } to = (struct sockaddr *)&to_addr; - to->sa_len = hp->h_length; to->sa_family = hp->h_addrtype; - memcpy(to->sa_data, *hostaddrs++, hp->h_length); - tolen = (to->sa_family == AF_INET) ? - sizeof (struct sockaddr_in) : - sizeof (struct sockaddr_in6); + + if (to->sa_family == AF_INET) { + to->sa_len = sizeof(struct sockaddr_in); + ((struct sockaddr_in *)to)->sin_port = + portmap->s_port; + memcpy(&(((struct sockaddr_in *)to)->sin_addr), + *hostaddrs++, hp->h_length); + tolen = sizeof(struct sockaddr_in); + } else { + to->sa_len = sizeof(struct sockaddr_in6); + ((struct sockaddr_in6 *)to)->sin6_port = + portmap->s_port; + memcpy(&(((struct sockaddr_in6 *)to)->sin6_addr), + *hostaddrs++, hp->h_length); + tolen = sizeof(struct sockaddr_in6); + } if (sendto(trans->tr_fd, outbuf, - outlen, 0, to, tolen) != -1) { + outlen, 0, (struct sockaddr *)to, tolen) != -1) { sent++; }