Leaving stdin closed is a bug, IMO; if you want no stdin then you open /dev/null for it.  Should it not be an error to have your server accept a connection and have it end up as stdin/stdout/stderr by accident?  e.g. if it's 2, the client will get the server's log messages mixed in its HTTP stream.  A server that wants to make its accepted socket into stdin  (e.g.) can easily call dup2(fd, 0) and make it happen.