@@ -4,6 +4,7 @@ module Lib
44
55import Control.Concurrent (forkFinally )
66import qualified Control.Exception as E
7+ import Control.Exception (SomeException , try )
78import Control.Monad (unless , forever , void )
89import qualified Data.ByteString as S
910import qualified Data.ByteString.Char8 as S8
@@ -14,7 +15,6 @@ import qualified Network.DNS.IO as DNS.IO
1415import qualified Network.DNS.Types as DNS
1516import Network.DNS.Types (DNSMessage )
1617import qualified Network.DNS.Encode as DNS.Encode
17- import qualified Network.DNS.Decode as DNS.Decode
1818import Data.IP.Internal
1919import qualified SlackHook as Slack
2020import Control.Concurrent.Async (concurrently )
@@ -71,10 +71,14 @@ runTCPServer args model = withSocketsDo $ do
7171
7272runTCPServerClientThread :: Args -> Model -> Socket -> SockAddr -> IO ()
7373runTCPServerClientThread args model sock clientAddr = forever $ do
74- msg <- DNS.IO. receiveVC sock
75- msgHandler sock msg clientAddr
74+ try_msg <- try (DNS.IO. receiveVC sock) :: IO (Either SomeException DNSMessage )
75+ case try_msg of
76+ Left ex ->
77+ putStrLn $ " Caught exception: " ++ show ex
78+ Right msg ->
79+ msgHandler sock msg clientAddr
7680 where
77- msgHandler s msg client = do
81+ msgHandler s msg client = do
7882 putStrLn $ show msg
7983 mapM_
8084 (\ q -> do
@@ -106,8 +110,12 @@ runUDPServer args model = withSocketsDo $ do
106110 bind sock $ addrAddress addr
107111 return sock
108112 loop sock = forever $ do
109- (msg, peer) <- DNS.IO. receiveFrom sock
110- msgHandler sock msg peer
113+ try_msg <- try (DNS.IO. receiveFrom sock) :: IO (Either SomeException (DNSMessage , SockAddr ))
114+ case try_msg of
115+ Left ex ->
116+ putStrLn $ " Caught exception: " ++ show ex
117+ Right (msg, peer) ->
118+ msgHandler sock msg peer
111119 msgHandler s msg client = do
112120 putStrLn $ show msg
113121 mapM_
0 commit comments