on master help sign in
utility to listen on any port, returning the port number and the socket
commit7a3b2e7c0a9427ad17cee8d679d3805b0beaf43b authorHannes Mehnert <hannes@mehnert.org> dateSat 2 Aug 2014, 20:57 (12 years ago) parent4ae829c
1 file changed+15−2
src/Util/Net.hs+15−2
src/Util/Net.hs+15−2
@@ -1,6 +1,6 @@
1−module Util.Net (listenOnLocalhost) where
1+module Util.Net (listenOnLocalhost, listenOnLocalhostAnyPort) where
22
3−import Network
3+import Network hiding (socketPort)
44import Network.Socket hiding (sClose, PortNumber)
55import Network.BSD (getProtocolNumber)
66import Control.Exception (bracketOnError)
@@ -20,3 +20,16 @@ listenOnLocalhost (PortNumber port) = do
2020 return sock
2121 )
2222
23+listenOnLocalhostAnyPort = do
24+ proto <- getProtocolNumber "tcp"
25+ localhost <- inet_addr "127.0.0.1"
26+ bracketOnError
27+ (socket AF_INET Stream proto)
28+ (sClose)
29+ (\sock -> do
30+ setSocketOption sock ReuseAddr 1
31+ bindSocket sock (SockAddrInet aNY_PORT localhost)
32+ listen sock maxListenQueue
33+ port <- socketPort sock
34+ return (sock, port)
35+ )