Matthew Flatt wrote at 07/02/2012 02:07 PM:
Another approach is to use a custodian, which makes it easy to release
resources without having a binding to each resource:

(D'oh; I forgot to mention custodians.) One thing to add: custodians used this way are useful for more than just closing your TCP ports in that networking loop. My little Web SCGI package creates a custodian for each HTTP request that comes through, which will make sure that resources like files that were opened in the course of servicing the request are freed. If it didn't do this, there is a not-unlikely scenario of an unusual but pretty benign exception while handling a request tickles a lapse in programming robustness, which then results in a file descriptor or something not being freed, and after a bunch of these pretty benign exceptions occur, suddenly the entire Web site goes down. (There are additional things you can do to mitigate this risk, but custodians are a good one.)

Neil V.

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to