diff options
Diffstat (limited to 'sys/netinet/in_pcb.c')
-rw-r--r-- | sys/netinet/in_pcb.c | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 49e0b49e7e7e..797c0dc445dd 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -1824,57 +1824,40 @@ in_pcbdrop(struct inpcb *inp) /* * Common routines to return the socket addresses associated with inpcbs. */ -struct sockaddr * -in_sockaddr(in_port_t port, struct in_addr *addr_p) -{ - struct sockaddr_in *sin; - - sin = malloc(sizeof *sin, M_SONAME, - M_WAITOK | M_ZERO); - sin->sin_family = AF_INET; - sin->sin_len = sizeof(*sin); - sin->sin_addr = *addr_p; - sin->sin_port = port; - - return (struct sockaddr *)sin; -} - int -in_getsockaddr(struct socket *so, struct sockaddr **nam) +in_getsockaddr(struct socket *so, struct sockaddr *sa) { struct inpcb *inp; - struct in_addr addr; - in_port_t port; inp = sotoinpcb(so); KASSERT(inp != NULL, ("in_getsockaddr: inp == NULL")); - INP_RLOCK(inp); - port = inp->inp_lport; - addr = inp->inp_laddr; - INP_RUNLOCK(inp); + *(struct sockaddr_in *)sa = (struct sockaddr_in ){ + .sin_len = sizeof(struct sockaddr_in), + .sin_family = AF_INET, + .sin_port = inp->inp_lport, + .sin_addr = inp->inp_laddr, + }; - *nam = in_sockaddr(port, &addr); - return 0; + return (0); } int -in_getpeeraddr(struct socket *so, struct sockaddr **nam) +in_getpeeraddr(struct socket *so, struct sockaddr *sa) { struct inpcb *inp; - struct in_addr addr; - in_port_t port; inp = sotoinpcb(so); KASSERT(inp != NULL, ("in_getpeeraddr: inp == NULL")); - INP_RLOCK(inp); - port = inp->inp_fport; - addr = inp->inp_faddr; - INP_RUNLOCK(inp); + *(struct sockaddr_in *)sa = (struct sockaddr_in ){ + .sin_len = sizeof(struct sockaddr_in), + .sin_family = AF_INET, + .sin_port = inp->inp_fport, + .sin_addr = inp->inp_faddr, + }; - *nam = in_sockaddr(port, &addr); - return 0; + return (0); } static bool |