diff options
author | Nicholas Ngai <nicholas@ngai.me> | 2021-11-29 16:30:33 -0800 |
---|---|---|
committer | Nicholas Ngai <nicholas@ngai.me> | 2021-11-29 16:30:33 -0800 |
commit | 654c2de9843f039508d8bdf3da9173f17e02ab5b (patch) | |
tree | dba9973391032991ae29231242691111c35e545e | |
parent | bdcd7db57a8d3dbbb6c59cff00aa922d71cd7728 (diff) | |
download | slirp-654c2de9843f039508d8bdf3da9173f17e02ab5b.zip slirp-654c2de9843f039508d8bdf3da9173f17e02ab5b.tar.gz slirp-654c2de9843f039508d8bdf3da9173f17e02ab5b.tar.bz2 |
socket: Check so_type instead of so_tcpcb for Unix-to-inet translation
Signed-off-by: Nicholas Ngai <nicholas@ngai.me>
-rw-r--r-- | src/socket.c | 25 |
1 files changed, 22 insertions, 3 deletions
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; |