|
|
|
@@ -48,13 +48,18 @@ initServer :: Net.PortNumber -> Buffering -> OnReceive -> IO ServerEnv |
|
|
|
initServer port buffermode handler = do |
|
|
|
sock <- Net.socket Net.AF_INET Net.Stream 0 |
|
|
|
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 |
|
|
|
chan <- newChan |
|
|
|
forkIO $ forever $ do |
|
|
|
msg <- readChan chan -- clearing the main channel |
|
|
|
return () |
|
|
|
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 = Net.close . socket |
|
|
|
|