24. Check for input or output requests with select().
25. If select() fails, logs error messages, notifies clients, and exits the main loop for shutdown
processing.
26. Gets the current time.
27. Checks print status of print jobs.
28. Updates CGI data.
29. Updates notifier messages.
30. Expires subscriptions and removes completed jobs.
31. Updates the browse list.
32. Checks for new incoming connections on listening sockets and accepts them.
33. Checks for new data on client sockets.
34. Processes the client input.
35. Writes data back to the clients.
36. Closes inactive clients.
37. Updates pending multi-file documents.
38. Updates the root certificate every time a 5 minute timer has elapsed.
39. Goes back to step 20.
40. Upon exit from the main loop:
41. Logs a status message.
42. Stops the server.
43. Frees all jobs.
44. Frees file descriptor sets.
45. Closes audit file descriptor.
46. Exits.
5.12.4.2 ping
ping opens a raw socket and uses the ICMP protocol's mandatory ECHO_REQUEST datagram to elicit an
ICMP ECHO_RESPONSE from a host or a gateway. An ECHO_REQUEST datagram, or ping, has an IP and
ICMP header, followed by a struct timeval, and then an arbitrary number of pad bytes used to fill out
the packet. For more information on the ping command, see the ping(8) man page.
5.12.4.3 ping6
The ping6 is the IPv6 counterpart to the IPv4 ping command (q.v.). It sends ICMPV6 ECHO_REQUESTs
to elicit ECHO_RESPONSEs. Use of ping6 requires the CAP_NET_RAWIO capability. For more
information on the ping6 command, see the ping6(8) man page.
5.12.4.4 openssl
openssl is a command-line interface to the OpenSSL cryptography toolkit, which implements the Secure
Socket Layer (SSL v2j and v3) and Transport Layer Security (TLS v1) network protocols and related
194