;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Dec 2002
;;;;
-;;;; $Id: base.lisp,v 1.4 2003/07/05 22:54:00 kevin Exp $
+;;;; $Id: base.lisp,v 1.5 2003/07/05 22:59:56 kevin Exp $
;;;; *************************************************************************
(in-package #:modlisp)
-(defun destroy-process (process)
- #+sbcl (sb-thread:destroy-thread process)
- #+cmucl (mp:destroy-process process)
- #+allegro (mp:process-kill process)
- #+lispworks (mp:process-kill process)
- )
-
-(defun close-socket (sock)
- (ignore-errors (close sock)))
-
-
(defun modlisp-start (&key (port +default-apache-port+)
(function 'demo-apache-command-processor)
(function-args nil))
(cmsg "listener is NIL in modlisp-stop")
(return-from modlisp-stop))
(dolist (worker (workers listener))
- (close-socket (socket worker))
+ (close-active-socket (socket worker))
(destroy-process (process worker)))
(setf (workers listener) nil)
(with-slots (process socket) listener
(error (e)
(format t "~&Error while trying to kill modlisp server~& ~A" e)))
(when socket
- (ignore-errors (close-socket socket))))
+ (ignore-errors (close-passive-socket socket))))
(setq *active-listeners* (remove listener *active-listeners*)))
(defun next-server-name ()
+++ /dev/null
-;;; -*- Mode:Lisp; Syntax:Common-lisp; Package: modlisp; Base:10 -*-
-
-(in-package #:modlisp)
-
-
-(defun make-socket-server (name function port &key wait (format :text))
- (let ((listener (ext:create-inet-listener port)))
- (values
- (mp:make-process
- (lambda () (start-socket-server listener function))
- :name name)
- listener)))
-
-(defun start-socket-server (listener function)
- (unwind-protect
- (loop
- (mp:process-wait-until-fd-usable listener :input)
- (multiple-value-bind (new-fd remote-host)
- (ext:accept-tcp-connection listener)
- (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 listener)))
+++ /dev/null
-;;; -*- Mode:Lisp; Syntax:Common-lisp; Package: modlisp; Base:10 -*-
-
-(in-package #:modlisp)
-
-(defun make-socket-server (name function port &key wait format)
- (declare (ignore name))
- (let ((listener (listen-to-inet-port :port port :reuse 1)))
- (values
- (sb-thread:make-thread
- (lambda () (start-socket-server listener function)))
- listener)))
-
-
-(defun start-socket-server (listener function)
- (handler-case
- (when (sb-sys:wait-until-fd-usable
- (sb-bsd-sockets:socket-file-descriptor listener) :input)
- (unwind-protect
- (loop
- (let* ((socket (sb-bsd-sockets:socket-accept listener))
- (stream (sb-bsd-sockets:socket-make-stream
- socket
- :element-type 'base-char
- :input t :output t)))
- (sb-thread:make-thread
- #'(lambda () (apache-command-issuer stream function)))))
- (sb-unix:unix-close
- (sb-bsd-sockets:socket-file-descriptor listener))))
- (sb-kernel::timeout (c)
- (format t "interrupted, time to die~%"))))
-
-(defun listen-to-inet-port (&key (port 0) (kind :stream) (reuse nil))
- "Create, bind and listen to an inet socket on *:PORT.
-setsockopt SO_REUSEADDR if :reuse is not nil"
- (let ((socket (make-instance 'sb-bsd-sockets:inet-socket
- :type :stream
- :protocol :tcp)))
- (if reuse
- (setf (sb-bsd-sockets:sockopt-reuse-address socket) t))
- (sb-bsd-sockets:socket-bind
- socket (sb-bsd-sockets:make-inet-address "0.0.0.0") port)
- (sb-bsd-sockets:socket-listen socket 15)
- socket))
-
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Dec 2002
;;;;
-;;;; $Id: modlisp.asd,v 1.4 2003/07/05 22:54:00 kevin Exp $
+;;;; $Id: modlisp.asd,v 1.5 2003/07/05 22:59:56 kevin Exp $
;;;; *************************************************************************
(in-package #:cl-user)
:depends-on (:kmrcl)
:components
((:file "package")
- (:file "variables" :depends-on ("package"))
(:file "compat" :depends-on ("package"))
+ (:file "variables" :depends-on ("package"))
(:file #+(or allegro cmu sbcl) "server"
#+clisp "impl-clisp"
#+lispworks "impl-lispworks"
- :depends-on ("compat"))
+ :depends-on ("compat" "variables"))
(:file "base"
:depends-on (#+(or allegro cmu sbcl) "server"
#+clisp "impl-clisp"