;;; -*- Mode:Lisp; Syntax:Common-lisp; Package: modlisp; Base:10 -*- (in-package #:modlisp) (defun make-socket-server (name function port &key wait (format :text)) (mp:make-process (lambda () (make-apache-listener port function)) :name name)) (defun make-apache-listener (port function) (let ((socket (ext:create-inet-listener port))) (unwind-protect (loop (mp:process-wait-until-fd-usable socket :input) (multiple-value-bind (new-fd remote-host) (ext:accept-tcp-connection socket) (let ((stream (sys:make-fd-stream new-fd :input t :output t))) (mp:make-process (lambda () (apache-command-issuer stream function)) :name (next-worker-name))))) (unix:unix-close socket))))