-This is a a thin-layer providing the Lisp side of the
-interface to Marc Battyani's mod_lisp apache module
-(http://www.fractalconcept.com).
+This package provided the Lisp side of the interface to Marc
+Battyani's mod_lisp apache module (http://www.fractalconcept.com).
+
+It has robust support for multiprocessing and for keeping track
+of worker processes to allow for cleaning shutting down the server.
+
+
+
+++ /dev/null
-;;; -*- Mode:Lisp; Syntax:Common-lisp; Package: modlisp; Base:10 -*-
-
-(in-package #:modlisp)
-
-(eval-when (compile load eval)
- (require :socket))
-
-(defun make-socket-server (name function port &key wait (format :text))
- (let* ((listener (socket:make-socket
- :connect :passive
- :local-port port
- :address-family
- (if (stringp port)
- :file
- (if (or (null port) (integerp port))
- :internet
- (error "illegal value for port: ~s" port)))
- :format format))
- (proc (mp::process-run-function name
- #'(lambda ()
- (start-socket-server listener function
- :wait wait)))))
- (values proc listener)))
-
-(defun start-socket-server (passive-socket function &key wait)
- ;; internal function run in the server lightweight process
- ;; that continually processes the connection.
- ;; This code is careful to ensure that the sockets are
- ;; properly closed something abnormal happens.
- (unwind-protect
- (loop
- (let ((connection (socket:accept-connection passive-socket)))
- (if wait
- (unwind-protect
- (funcall connection function)
- (excl:errorset (close connection) nil))
- (let ((f function)
- (c connection)
- (name (next-worker-name)))
- (mp:process-run-function
- name
- #'(lambda ()
- (unwind-protect
- (apache-command-issuer connection function)
- #+ignore
- (handler-case
- (apache-command-issuer function connection)
- (error (e)
- #+ignore
- (format t "~&Error ~A [~A]~%" e name))
- (:no-error ()
- #+ignore
- (format t "~&~A ended" name)))
- (excl:errorset (close connection) nil))))))))
- (ignore-errors (close passive-socket))))
+++ /dev/null
-;;; -*- Mode:Lisp; Syntax:Common-lisp; Package: modlisp; Base:10 -*-
-
-(in-package #:modlisp)
-
-(defun make-socket-server (name port function &key wait (format :text))
- (declare (ignore name))
- (let ((passive-socket (ext:socket-server port)))
- (values (start-socket-server passive-socket function :wait wait)
- passive-socket)))
-
-(defun start-socket-server (passive-socket function &key wait)
- (unwind-protect
- (loop
- (let ((connection (ext:socket-accept passive-socket)))
- (unwind-protect
- (apache-command-issuer connection function)
- (ignore-errors (close connection)))))
- (ignore-errors (close passive-socket))))