diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs index 883f4d183d..21a5761bcb 100644 --- a/Utility/WebApp.hs +++ b/Utility/WebApp.hs @@ -62,15 +62,19 @@ runWebApp app observer = do observer =<< socketPort sock {- Binds to a local socket, selecting any free port. + - + - Prefers to bind to the ipv4 address rather than the ipv6 address + - of localhost, if it's available. - - As a (very weak) form of security, only connections from - localhost are accepted. -} localSocket :: IO Socket localSocket = do addrs <- getAddrInfo (Just hints) (Just localhost) Nothing - case addrs of - [] -> error "unable to bind to a local socket" - (addr:_) -> go addr + case (partition (\a -> addrFamily a == AF_INET) addrs) of + (v4addr:_, _) -> go v4addr + (_, v6addr:_) -> go v6addr + _ -> error "unable to bind to a local socket" where hints = defaultHints { addrFlags = [AI_ADDRCONFIG]