diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-08-16 15:21:24 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-08-18 19:25:19 +0200 |
| commit | bba8c1f5dba992dd0699992d72c600b067a09a04 (patch) | |
| tree | 81cc8fe58e190e7c8a31d5537ed63d588227969b | |
| parent | 896931339ac254c2bbfa0e2d0b780ad918a57b34 (diff) | |
Fix reporting ephemeral port from server socket
Changelog: Fixed discovery when forced to bind not-selected ephemeral port.
| -rw-r--r-- | src/Erebos/Network.hs | 26 |
1 files changed, 16 insertions, 10 deletions
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 |