-runHttpd :: Config -> ResTree -> [FallbackHandler] -> IO ()
-runHttpd cnf tree fbs
- = withSocketsDo $
- do installHandler sigPIPE Ignore Nothing
-
- case cnfSSLConfig cnf of
- Nothing
- -> return ()
- Just scnf
- -> do so <- listenOn (sslServerPort scnf)
- _loopTID <- forkIO $ httpsLoop (sslContext scnf) so
- return ()
-
- httpLoop =<< listenOn (cnfServerPort cnf)
+--
+-- FIXME: update the above example
+runHttpd ∷ Config → HostMap → IO ()
+runHttpd cnf hm
+ = do let launchers
+ = catMaybes
+ [ do addr ← cnfServerV4Addr cnf
+ return ( launchListener =≪ listenOn AF_INET addr (cnfServerPort cnf)
+ )
+ , do addr ← cnfServerV6Addr cnf
+ return ( launchListener =≪ listenOn AF_INET6 addr (cnfServerPort cnf)
+ )
+#if defined(HAVE_SSL)
+ , do scnf ← cnfSSLConfig cnf
+ addr ← cnfServerV4Addr cnf
+ return ( do so ← listenOn AF_INET addr (sslServerPort scnf)
+ launchListener (sslContext scnf, so)
+ )
+ , do scnf ← cnfSSLConfig cnf
+ addr ← cnfServerV6Addr cnf
+ return ( do so ← listenOn AF_INET6 addr (sslServerPort scnf)
+ launchListener (sslContext scnf, so)
+ )
+#endif
+ ]
+ sequence_ launchers
+ waitForever