How does one create a dispatch source that responds to multiple connections on the same socket, that is, listening on a socket with a backlog larger than 1? In the online doc it seems that you should have a connected socket to read from, the same way as reading from a file. But documentation also says you need a socket returned from listen(). So where does the accept() call fit into this? Specifically it would be nice to avoid blocking on accept() before creating a read source. I found this echo server example based on kqueue events which seems to receive a read event. First the handler will accept the socket, then do normal read processing. Is this also how it should work with libdispatch, and if so, what about other platforms. http://www.monkeys.com/freeware/kqueue-echo.c And how about similar event sources for DNS lookup? Libevent did a bit of work on these issues, and I see it has already been mentioned on this mailing list. Related: I don't see any examples of custom event sources - but I thought that might also be a way to schedule client handlers? Finally, what is the policy on busy loops and locking operations? One could for example push a blocking socket accept() call onto a queue, but this consumes a thread from a thread pool that is designed to reflect number of cpus not number of long running tasks. Alternatively one could create a dedicated thread for this purpose, but that doesn't seem very elegant. Regards, Mikkel