3.14 Running the server
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
    • Packages
      • SWI-Prolog HTTP support
        • The HTTP server libraries
          • Running the server
            • Common server interface options
            • Multi-threaded Prolog
            • library(http/http_unix_daemon): Run SWI-Prolog HTTP server as a Unix system daemon
            • From (Unix) inetd
              • http_server/1
            • MS-Windows
            • As CGI script
            • Using a reverse proxy

3.14.4 From (Unix) inetd

All modern Unix systems handle a large number of the services they run through the super-server inetd or one of its descendants (xinetd, systemd etc.) Such a program reads a configuration file (for example /etc/inetd.conf) and opens server-sockets on all ports defined in this file. As a request comes in it accepts it and starts the associated server such that standard I/O is performed through the socket. This approach has several advantages:

  • Simplification of servers
    Servers don't have to know about sockets and -operations.

  • Centralised authorisation
    Using tcpwrappers and similar tools, simple and effective firewalling of all services can be realised.

  • Automatic start and monitor
    The inetd automatically starts the server‘just-in-time' and starts additional servers or restarts a crashed server according to its configuration.

The very small generic script for handling inetd based connections is in inetd_httpd, defining http_server/1:

http_server(:Goal)
Initialises and runs http_wrapper/5 in a loop until failure or end-of-file. This server does not support the Port option as the port is specified with the inetd configuration. The only supported option is After.

Here is the example from demo_inetd

#!/usr/bin/pl -t main -q -f
:- use_module(demo_body).
:- use_module(inetd_httpd).

main :-
        http_server(reply).

With the above file installed in /home/jan/plhttp/demo_inetd, the following line in /etc/inetd enables the server at port 4001 guarded by tcpwrappers. After modifying inetd, send the daemon the HUP signal to make it reload its configuration. For more information, please check inetd.conf(5).

4001 stream tcp nowait nobody /usr/sbin/tcpd /home/jan/plhttp/demo_inetd