From 654c2de9843f039508d8bdf3da9173f17e02ab5b Mon Sep 17 00:00:00 2001 From: Nicholas Ngai Date: Mon, 29 Nov 2021 16:30:33 -0800 Subject: socket: Check so_type instead of so_tcpcb for Unix-to-inet translation Signed-off-by: Nicholas Ngai --- src/socket.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/socket.c') diff --git a/src/socket.c b/src/socket.c index a170676..8aa942e 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1080,7 +1080,17 @@ void sotranslate_accept(struct socket *so) so->so_fport = 0; // TODO Is there a better way of checking socket type? - s = slirp_socket(PF_INET, so->so_tcpcb ? SOCK_STREAM : SOCK_DGRAM, 0); + switch (so->so_type) { + case IPPROTO_TCP: + s = slirp_socket(PF_INET, SOCK_STREAM, 0); + break; + case IPPROTO_UDP: + s = slirp_socket(PF_INET, SOCK_DGRAM, 0); + break; + default: + g_assert_not_reached(); + break; + } if (s < 0) { g_error("Ephemeral slirp_socket() allocation failed"); goto unix2inet_cont; @@ -1113,8 +1123,17 @@ unix2inet_cont: so->so_faddr6 = slirp->vhost_addr6; so->so_fport6 = 0; - // TODO Is there a better way of checking socket type? - s = slirp_socket(PF_INET6, so->so_tcpcb ? SOCK_STREAM : SOCK_DGRAM, 0); + switch (so->so_type) { + case IPPROTO_TCP: + s = slirp_socket(PF_INET6, SOCK_STREAM, 0); + break; + case IPPROTO_UDP: + s = slirp_socket(PF_INET6, SOCK_DGRAM, 0); + break; + default: + g_assert_not_reached(); + break; + } if (s < 0) { g_error("Ephemeral slirp_socket() allocation failed"); goto unix2inet6_cont; -- cgit v1.1