equal
deleted
inserted
replaced
27 import qualified Codec.Binary.Base64 as Base64 |
27 import qualified Codec.Binary.Base64 as Base64 |
28 import qualified Data.ByteString as BW |
28 import qualified Data.ByteString as BW |
29 import qualified Data.ByteString.Char8 as B |
29 import qualified Data.ByteString.Char8 as B |
30 import qualified Control.Exception as E |
30 import qualified Control.Exception as E |
31 import System.Entropy |
31 import System.Entropy |
|
32 import Data.Either |
32 ----------------------------- |
33 ----------------------------- |
33 import CoreTypes |
34 import CoreTypes |
34 import Utils |
35 import Utils |
35 |
36 |
36 |
37 |
37 acceptLoop :: Socket -> Chan CoreMessage -> IO () |
38 acceptLoop :: Socket -> Chan CoreMessage -> IO () |
38 acceptLoop servSock chan = E.bracket openHandle closeHandle f |
39 acceptLoop servSock chan = E.bracket openHandle closeHandle (forever . f) |
39 where |
40 where |
40 f ch = forever $ |
41 f ch = E.try (Network.Socket.accept servSock) >>= \v -> case v of |
41 do |
42 Left (e :: E.IOException) -> return () |
42 (sock, sockAddr) <- Network.Socket.accept servSock |
43 Right (sock, sockAddr) -> do |
43 |
|
44 clientHost <- sockAddr2String sockAddr |
44 clientHost <- sockAddr2String sockAddr |
45 |
45 |
46 currentTime <- getCurrentTime |
46 currentTime <- getCurrentTime |
47 |
47 |
48 sendChan' <- newChan |
48 sendChan' <- newChan |