diff options
Diffstat (limited to 'src/Erebos/Network.hs')
| -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 |