From bba8c1f5dba992dd0699992d72c600b067a09a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 16 Aug 2026 15:21:24 +0200 Subject: Fix reporting ephemeral port from server socket Changelog: Fixed discovery when forced to bind not-selected ephemeral port. --- src/Erebos/Network.hs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs index fd30b8c..b98d007 100644 --- a/src/Erebos/Network.hs +++ b/src/Erebos/Network.hs @@ -1155,16 +1155,22 @@ joinMulticast sock = getServerAddresses :: Server -> IO [ SockAddr ] getServerAddresses Server {..} = do - alloca $ \pcount -> do - ptr <- cLocalAddresses pcount - if ptr == nullPtr - then do - return [] - else do - count <- fromIntegral <$> peek pcount - res <- peekArray count ptr - cFree ptr - return $ map (inetToSockAddr . (, serverPort serverOptions )) res + tryReadMVar serverSocket >>= \case + Just sock -> do + getSocketName sock >>= \case + SockAddrInet6 port _ _ _ -> do + alloca $ \pcount -> do + ptr <- cLocalAddresses pcount + if ptr == nullPtr + then do + return [] + else do + count <- fromIntegral <$> peek pcount + res <- peekArray count ptr + cFree ptr + return $ map (inetToSockAddr . (, port )) res + _ -> return [] + Nothing -> return [] getBroadcastAddresses :: PortNumber -> IO [SockAddr] getBroadcastAddresses port = do -- cgit v1.2.3