I am the author of the Racket web server. It is always in asynchronous mode. As Greg mentions, it uses Racket streams that are compiled for continuations, and when you block I / O, they are stored in the data structure associated with the blocked port that is polled using kpoll / kqueue / etc, just like manually written asynchronous IO.
source share