[racket] tcp-read handlers

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sat Jan 18 11:04:28 EST 2014

The `exn?` predicate would catch all exceptions from the base
libraries.[*]

I think the problem may be that the underlying TCP port is read in a
separate decoding thread, and so the exception and printing happens in
that thread. If I'm right, then that seems like a flaw in our
implementation of decoding.

[*] To avoid interfering with the `exn:break?` exceptions triggered by
    Ctl-C, you almost always want `exn:fail?` instead of just `exn?`.

At Sat, 18 Jan 2014 09:50:15 -0200, Eduardo Bellani wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Is there a way to install a handler for the tcp-error exception?
> I have a function like this
> 
> (define (get-page link-url (max-tries 5))
>   (let loop ([current-try 0])
>     (with-handlers ([exn?
>                      (? (e)
>                         (if (> current-try max-tries)
>                             (error 'get-page
>                                    "failed because it exceeded ~a tries"
>                                    max-tries)
>                             (begin (sleep 2)
>                                    (loop (add1 current-try)))))])
>       (get-pure-port link-url))))
> 
> that I'm using to crawl some data, but sometimes it's printing:
> 
> tcp-read: error reading
>   system error: Connection reset by peer; errno=104
>   context...:
>    /usr/racket/collects/net/url.rkt:392:3
> 
> Thanks for the attention.
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.14 (GNU/Linux)
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
> 
> iEYEARECAAYFAlLaanUACgkQSbLl0kCTjGkm+ACbBSMyUuY4NOYjdLMgba/OJAFc
> 8OYAn0NkLMKLLma/MxAeEFMLtnrMekOY
> =aAUJ
> -----END PGP SIGNATURE-----
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

Posted on the users mailing list.