-(defun modlisp-start (&key (port +default-apache-port+)
- (function 'demo-apache-command-processor)
- (function-args nil))
- (let ((listener (make-instance 'listener)))
- (handler-case
- (make-socket-server (next-server-name) function port listener
- :format :text :wait nil
- :function-args function-args)
- (error (e)
- (format t "~&Error while trying to start modlisp server~& ~A" e)
- (decf *listener-count*)
- (values nil nil))
- (:no-error (process socket)
- (setf (process listener) process)
- (setf (socket listener) socket)
- (push listener *active-listeners*)
- listener))))
-
-(defun modlisp-stop (listener)
- (unless listener
- (cmsg "listener is NIL in modlisp-stop")
- (return-from modlisp-stop))
- (dolist (worker (workers listener))
- (close-socket (socket worker))
- (destroy-process (process worker)))
- (setf (workers listener) nil)
- (with-slots (process socket) listener
- (handler-case
- (destroy-process process)
- (error (e)
- (format t "~&Error while trying to kill modlisp server~& ~A" e)))
- (when socket
- (ignore-errors (close-socket socket))))
- (setq *active-listeners* (remove listener *active-listeners*)))
-
-(defun next-server-name ()
- (format nil "modlisp-socket-server-~d" (incf *listener-count*)))