| @@ -48,13 +48,18 @@ initServer :: Net.PortNumber -> Buffering -> OnReceive -> IO ServerEnv | |||||
| initServer port buffermode handler = do | initServer port buffermode handler = do | ||||
| sock <- Net.socket Net.AF_INET Net.Stream 0 | sock <- Net.socket Net.AF_INET Net.Stream 0 | ||||
| Net.setSocketOption sock Net.ReuseAddr 1 | Net.setSocketOption sock Net.ReuseAddr 1 | ||||
| Net.bind sock (Net.SockAddrInet port Net.iNADDR_ANY) | |||||
| addr <- Net.addrAddress <$> resolve | |||||
| Net.bind sock addr | |||||
| Net.listen sock 5 | Net.listen sock 5 | ||||
| chan <- newChan | chan <- newChan | ||||
| forkIO $ forever $ do | forkIO $ forever $ do | ||||
| msg <- readChan chan -- clearing the main channel | msg <- readChan chan -- clearing the main channel | ||||
| return () | return () | ||||
| return (ServerEnv buffermode sock chan handler) | return (ServerEnv buffermode sock chan handler) | ||||
| where resolve = do | |||||
| let hints = Net.defaultHints { Net.addrSocketType = Net.Stream } | |||||
| addrs <- Net.getAddrInfo (Just hints) (Just "127.0.0.1") (Just $ show port) | |||||
| return $ head addrs | |||||
| close :: ServerEnv -> IO () | close :: ServerEnv -> IO () | ||||
| close = Net.close . socket | close = Net.close . socket | ||||