- (defun modlisp-start (&key (port +default-apache-port+)
- (function 'demo-apache-command-processor))
- (handler-case
- (make-socket-server (next-server-name) function port
- :format :text :wait nil)
- (error (e)
- (format t "~&Error while trying to start modlisp server~& ~A" e)
- (decf *listener-count*)
- nil)
- (:no-error (process socket)
- (setq *listener-socket* socket)
- (setq *listener-process* process)
- process)))
-
- (defun modlisp-stop ()
- (when *listener-process*
- (format t "~&; killing modlisp server process ~A~%" *listener-process*)
- (handler-case
- (progn
- #+sbcl (sb-thread:destroy-thread *listener-process*)
- #+cmucl (mp:destroy-process *listener-process*)
- #+allegro (mp:process-kill *listener-process*)
- #+allegro (mp:process-allow-schedule)
- #+lispworks (mp:process-kill *listener-process*))
- (error (e)
- (format t "~&Error while trying to kill modlisp server~& ~A" e))
- (:no-error (res)
- (declare (ignore res))
- (setq *listener-process* nil))))
- (when *listener-socket*
- (ignore-errors (close *listener-socket*))
- (setq *listener-socket* nil)))
-
- ) ;; closure
-
-(defun next-server-name ()
- (format nil "modlisp-socket-server-~d" (incf *listener-count*)))