aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Ngai <nicholas@ngai.me>2021-11-29 16:30:33 -0800
committerNicholas Ngai <nicholas@ngai.me>2021-11-29 16:30:33 -0800
commit654c2de9843f039508d8bdf3da9173f17e02ab5b (patch)
treedba9973391032991ae29231242691111c35e545e
parentbdcd7db57a8d3dbbb6c59cff00aa922d71cd7728 (diff)
downloadslirp-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.c25
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;