From 26a30072684f59dc3275ec123ba56547cc36eaa2 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 12 Mar 2025 20:23:37 -0400 Subject: [PATCH] http: We can bind to localhost if we do it right, apparently. --- src/http.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/http.c b/src/http.c index c57392cd..6e73dc8a 100644 --- a/src/http.c +++ b/src/http.c @@ -716,10 +716,7 @@ int tf_http_listen(tf_http_t* http, int port, bool local_only, tf_tls_context_t* if (r == 0) { - if (tf_util_is_mobile()) - { - local_only = false; - } + bool use_ipv6 = !tf_util_is_mobile(); #if defined(__HAIKU__) /* @@ -727,19 +724,21 @@ int tf_http_listen(tf_http_t* http, int port, bool local_only, tf_tls_context_t* ** becomes unusable. Since we probably want localhost only ** on this single-user OS, let's just assume IPv4. */ - struct sockaddr_in addr = { + use_ipv6 = false; +#endif + + struct sockaddr_in addr4 = { .sin_family = AF_INET, - .sin_addr = { .s_addr = local_only ? INADDR_LOOPBACK : INADDR_ANY }, + .sin_addr = { .s_addr = local_only ? htonl(INADDR_LOOPBACK) : htonl(INADDR_ANY) }, .sin_port = ntohs(port), }; -#else - struct sockaddr_in6 addr = { + struct sockaddr_in6 addr6 = { .sin6_family = AF_INET6, .sin6_addr = local_only ? (struct in6_addr)IN6ADDR_LOOPBACK_INIT : (struct in6_addr)IN6ADDR_ANY_INIT, .sin6_port = ntohs(port), }; -#endif - r = uv_tcp_bind(&listener->tcp, (struct sockaddr*)&addr, 0); + struct sockaddr* addr = use_ipv6 ? (struct sockaddr*)&addr6 : (struct sockaddr*)&addr4; + r = uv_tcp_bind(&listener->tcp, addr, 0); if (r) { tf_printf("%s:%d: uv_tcp_bind: %s\n", __FILE__, __LINE__, uv_strerror(r));