[Haskell-cafe] Network Connect Timeouts

Chris Wong lambda.fairy at gmail.com
Sat Oct 14 10:09:51 UTC 2017


Hi Mark,

What networking library are you using?

There should be a lower level interface which allows for managing the
lifetime of a connection by hand.

Chris

On Oct 14, 2017 15:17, "Mark Fine" <mark.fine at gmail.com> wrote:

> 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 = do
>   ok <- newIORef False
>   void $ timeout microseconds $ runTCPClient settings $ const $
>     writeIORef ok True
>   ok' <- readIORef ok
>   unless 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 a
> runTCPClient' microseconds settings action = do
>   tryTCPClient microseconds settings
>   runTCPClient settings action
>
> I'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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20171014/ad4373a2/attachment.html>


More information about the Haskell-Cafe mailing list