I see here: https://httpd.apache.org/docs/current/invoking.html
"If the Listen specified in the configuration file is default of 80 (or any other port below 1024), then it is necessary to have root privileges in order to start apache, so that it can bind to this privileged port.
Once the server has started and performed a few preliminary activities such as opening its log files, it will launch several child processes which do the work of listening for and answering requests from clients. The main httpd process continues to run as the root user, but the child processes run as a less privileged user. "
Question is: How can a child process do so? The incoming request happens on port 80 which the master is now bound to.
I am guessing the master process will call the bind() call and the child can then do a listen() call against the bound socket? Or Does the master server pass the children the incoming data?
First per: https://httpd.apache.org/docs/current/invoking.html
covener says "Normally the listening socket is inherited by the children when they're forked. They can either all try to call accept on it, or they can fight over a mutex and let one get into accept()"
Next,
http://httpd.apache.org/docs/current/misc/perf-tuning.html
It also says: "...upon accepting the connection, the listener thread wakes up a worker thread to do the request processing."
For completeness, since it's a listener process I'll assume it already did listen(). That call is not in the truss output above.