summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-08-16 15:21:24 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-08-18 19:25:19 +0200
commitbba8c1f5dba992dd0699992d72c600b067a09a04 (patch)
tree81cc8fe58e190e7c8a31d5537ed63d588227969b /src
parent896931339ac254c2bbfa0e2d0b780ad918a57b34 (diff)
Fix reporting ephemeral port from server socket
Changelog: Fixed discovery when forced to bind not-selected ephemeral port.
Diffstat (limited to 'src')
-rw-r--r--src/Erebos/Network.hs26
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