1 ;;; -*- Mode:Lisp; Syntax:Common-lisp; Package: modlisp; Base:10 -*-
5 (eval-when (compile load eval)
8 (defun make-socket-server (name function port &key wait (format :text))
9 (let* ((listener (socket:make-socket
15 (if (or (null port) (integerp port))
17 (error "illegal value for port: ~s" port)))
19 (proc (mp::process-run-function name
21 (start-socket-server listener function
23 (values proc listener)))
25 (defun start-socket-server (passive-socket function &key wait)
26 ;; internal function run in the server lightweight process
27 ;; that continually processes the connection.
28 ;; This code is careful to ensure that the sockets are
29 ;; properly closed something abnormal happens.
32 (let ((connection (socket:accept-connection passive-socket)))
35 (funcall connection function)
36 (excl:errorset (close connection) nil))
39 (name (next-worker-name)))
40 (mp:process-run-function
44 (apache-command-issuer connection function)
47 (apache-command-issuer function connection)
50 (format t "~&Error ~A [~A]~%" e name))
53 (format t "~&~A ended" name)))
54 (excl:errorset (close connection) nil))))))))
55 (ignore-errors (close passive-socket))))