@@ -1,6 +1,6 @@
1−module Util.Net (listenOnLocalhost) where
1+module Util.Net (listenOnLocalhost, listenOnLocalhostAnyPort) where
3−import Network
3+import Network hiding (socketPort)
4import Network.Socket hiding (sClose, PortNumber)
4import Network.Socket hiding (sClose, PortNumber)
5import Network.BSD (getProtocolNumber)
5import Network.BSD (getProtocolNumber)
6import Control.Exception (bracketOnError)
6import Control.Exception (bracketOnError)
@@ -20,3 +20,16 @@ listenOnLocalhost (PortNumber port) = do
20 return sock
20 return sock
23+listenOnLocalhostAnyPort = do
24+ proto <- getProtocolNumber "tcp"
25+ localhost <- inet_addr "127.0.0.1"
27+ (socket AF_INET Stream proto)
30+ setSocketOption sock ReuseAddr 1
31+ bindSocket sock (SockAddrInet aNY_PORT localhost)
32+ listen sock maxListenQueue
33+ port <- socketPort sock