void in6_setpeeraddr(struct in6pcb *in6p, struct mbuf *nam) { struct sockaddr_in6 *sin6; if (in6p->in6p_af != AF_INET6) return; nam->m_len = sizeof(*sin6); sin6 = mtod(nam, struct sockaddr_in6 *); sockaddr_in6_init(sin6, &in6p->in6p_faddr, in6p->in6p_fport, 0, 0); (void)sa6_recoverscope(sin6); /* XXX: should catch errors */ }
struct sockaddr * sockaddr_in6_externalize(struct sockaddr *dst, socklen_t socklen, const struct sockaddr *src) { struct sockaddr_in6 *sin6; sin6 = satosin6(sockaddr_copy(dst, socklen, src)); if (sin6 == NULL || sa6_recoverscope(sin6) != 0) return NULL; return dst; }