diff --git a/UserManual.md b/UserManual.md index 3a2aed5c..9642eece 100644 --- a/UserManual.md +++ b/UserManual.md @@ -488,6 +488,14 @@ by the master thread. `process_new_connection()` actually processes the connection, i.e. reads the request, parses it, and performs appropriate action depending on a parsed request. +Master thread uses `poll()` and `accept()` to accept new connections on +listening sockets. `poll()` is used to avoid `FD_SETSIZE` limitation of +`select()`. Since there are only a few listening sockets, there is no reason +to use hi-performance alternatives like `epoll()` or `kqueue()`. Worker +threads use blocking IO on accepted sockets for reading and writing data. +All accepted sockets have `SO_RCVTIMEO` and `SO_SNDTIMEO` socket options set +(controlled by `request_timeout_ms` mongoose option, 30 seconds default) which +specify read/write timeout on client connection. # Other Resources - Presentation made by Arnout Vandecappelle at FOSDEM 2011 on 2011-02-06