I'd like a configurable network connect timeout. Has anyone solved this reasonably?System.Timeout.timeout times out connections, but works on the granularity of the life of the connection. Is there a reasonable way to configure a timeout around just establishing the connection? Maybe something like a conditional timeout that enables an action to disable the timeout once it expires?As a workaround, I'm spinning trying to successfully connect first before trying to connect for real:-- | Try the TCP connection and see if you can connect...--tryTCPClient :: Int -> ClientSettings -> IO ()tryTCPClient microseconds settings = dook <- newIORef Falsevoid $ timeout microseconds $ runTCPClient settings $ const $writeIORef ok Trueok' <- readIORef okunless ok' $tryTCPClient microseconds settings-- | Wrap runTCPClient with a connect timeout.---- Tries the TCP connection first, and the runs the regular runTCPClient.-- Of course, this only enforces a TCP connect timeout on the first connect.-- The second TCP connect has no timeout :(--runTCPClient' :: Int -> ClientSettings -> (AppData -> IO a) -> IO arunTCPClient' microseconds settings action = dotryTCPClient microseconds settingsrunTCPClient settings actionI've also tried running the tryTCPClient in its own thread concurrently with runTCPClient and throwing an exception if it can't connect in microseconds. None of these offer an actual true connection establishment timeout.Has anyone found a way to solve this? Thanks!Mark
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post.