on 4e7a0ee help sign in
22 lines 658 B history raw
1module Util.Net (listenOnLocalhost) where
3import Network
4import Network.Socket hiding (sClose, PortNumber)
5import Network.BSD (getProtocolNumber)
6import Control.Exception (bracketOnError)
8-- Copied from upstream impl of listenOn
9-- bound to localhost interface instead of iNADDR_ANY
10listenOnLocalhost (PortNumber port) = do
11 proto <- getProtocolNumber "tcp"
12 localhost <- inet_addr "127.0.0.1"
13 bracketOnError
14 (socket AF_INET Stream proto)
15 (sClose)
16 (\sock -> do
17 setSocketOption sock ReuseAddr 1
18 bindSocket sock (SockAddrInet port localhost)
19 listen sock maxListenQueue
20 return sock
21 )