socket: Check so_type instead of so_tcpcb for Unix-to-inet translation
Signed-off-by: Nicholas Ngai <nicholas@ngai.me>
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 @@
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 @@
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;