static void tcp6_usr_accept(netmsg_t msg) { struct socket *so = msg->accept.base.nm_so; struct sockaddr **nam = msg->accept.nm_nam; int error = 0; struct inpcb *inp; struct tcpcb *tp = NULL; TCPDEBUG0; inp = so->so_pcb; if (so->so_state & SS_ISDISCONNECTED) { error = ECONNABORTED; goto out; } if (inp == 0) { error = EINVAL; goto out; } tp = intotcpcb(inp); TCPDEBUG1(); in6_setpeeraddr(so, nam); COMMON_END(PRU_ACCEPT); }
int in6_mapped_peeraddr(struct socket *so, struct sockaddr **nam) { struct inpcb *inp = sotoinpcb(so); int error; if (inp == NULL) return EINVAL; if (inp->inp_vflag & INP_IPV4) { error = in_setpeeraddr(so, nam); if (error == 0) error = in6_sin_2_v4mapsin6_in_sock(nam); } else { /* scope issues will be handled in in6_setpeeraddr(). */ error = in6_setpeeraddr(so, nam); } return error; }