-(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-active-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-passive-socket socket))))
- (setq *active-listeners* (remove listener *active-listeners*)))
-
-(defun next-server-name ()
- (format nil "modlisp-socket-server-~d" (incf *listener-count*)))
+(defun modlisp-start (&key (port +default-modlisp-port+)
+ (processor 'demo-modlisp-command-processor)
+ (processor-args nil)
+ (catch-errors t)
+ timeout
+ number-fixed-workers
+ remote-host-checker)
+ (let* ((server (make-instance 'ml-server
+ :processor processor
+ :processor-args processor-args
+ :port port))
+ (listener (make-instance 'listener :port port
+ :base-name "modlisp"
+ :function 'modlisp-command-issuer
+ :function-args (list server)
+ :format :text
+ :wait nil
+ :catch-errors catch-errors
+ :timeout timeout
+ :number-fixed-workers number-fixed-workers
+ :remote-host-checker remote-host-checker)))
+ (setf (listener server) listener)
+ (init/listener listener :start)
+ (setf *ml-server* server)
+ server))