From 8b029d0050f1561388b2ecd2a08c5919c4443d67 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Sat, 24 May 2025 17:25:55 +0200 Subject: [PATCH] cluster/websocket-ixwebsocket: Determine proper address_family Closes #4474 --- .../websocket/WebSocket-IXWebSocket.cc | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cluster/websocket/WebSocket-IXWebSocket.cc b/src/cluster/websocket/WebSocket-IXWebSocket.cc index 08528f0f51..36d4864236 100644 --- a/src/cluster/websocket/WebSocket-IXWebSocket.cc +++ b/src/cluster/websocket/WebSocket-IXWebSocket.cc @@ -3,10 +3,13 @@ // Implementation of a WebSocket server and clients using the IXWebSocket client library. #include "zeek/cluster/websocket/WebSocket.h" +#include #include #include +#include "zeek/IPAddr.h" #include "zeek/Reporter.h" +#include "zeek/net_util.h" #include "ixwebsocket/IXConnectionState.h" #include "ixwebsocket/IXSocketTLSOptions.h" @@ -73,11 +76,18 @@ private: std::unique_ptr StartServer(std::unique_ptr dispatcher, const ServerOptions& options) { - auto server = - std::make_unique(options.port, options.host, ix::SocketServer::kDefaultTcpBacklog, - options.max_connections, - ix::WebSocketServer::kDefaultHandShakeTimeoutSecs, - ix::SocketServer::kDefaultAddressFamily, options.ping_interval_seconds); + if ( ! zeek::IPAddr::IsValid(options.host.c_str()) ) { + zeek::reporter->Error("WebSocket: Host is not a valid IP %s", options.host.c_str()); + return nullptr; + } + + zeek::IPAddr host_addr(options.host); + int address_family = host_addr.GetFamily() == IPv4 ? AF_INET : AF_INET6; + + auto server = std::make_unique(options.port, options.host, + ix::SocketServer::kDefaultTcpBacklog, options.max_connections, + ix::WebSocketServer::kDefaultHandShakeTimeoutSecs, + address_family, options.ping_interval_seconds); if ( ! options.per_message_deflate ) server->disablePerMessageDeflate();