Skip to content

Commit

Permalink
Use tcp listener inside http-demo
Browse files Browse the repository at this point in the history
  • Loading branch information
ebrasca committed Sep 11, 2018
1 parent 3a29dc5 commit 635e541
Showing 1 changed file with 13 additions and 24 deletions.
37 changes: 13 additions & 24 deletions net/http-demo.lisp
Expand Up @@ -115,31 +115,20 @@
(t (sys.net:buffered-format stream "HTTP/1.0 404 Not Found~%~%"))))
(t (sys.net:buffered-format stream "HTTP/1.0 400 Bad Request~%~%"))))))))

(defun http-server (connection-queue)
(defvar *http-server-thread* nil)
(defvar *http-server-listener* nil)

(defun http-server ()
(loop
(let ((connection (mezzano.supervisor:fifo-pop connection-queue)))
(ignore-errors (serve-request connection)))))
(loop :for connection :in (mezzano.network.tcp:wait-for-connections *http-server-listener*) :do
(let ((stream (mezzano.network.tcp:tcp4-accept-connection connection)))
(ignore-errors (serve-request stream))))))

(defun start-http-server (&optional (port 80))
(let* ((connection-queue (mezzano.supervisor:make-fifo 50))
(server-thread (mezzano.supervisor:make-thread (lambda () (http-server connection-queue))
:name "HTTP server"))
(listen-function (lambda (connection)
(when (not (mezzano.supervisor:fifo-push
(make-instance 'mezzano.network.tcp::tcp-stream :connection connection)
connection-queue
nil))
;; Drop connections when they can't be handled.
(close connection)))))
(setf mezzano.network.tcp::*server-alist* (remove port mezzano.network.tcp::*server-alist*
:key #'first))
(push (list port listen-function) mezzano.network.tcp::*server-alist*)
(values server-thread listen-function connection-queue)))

(defvar *http-server-thread* nil)
(defvar *http-server-listen-function* nil)
(defvar *http-server-connection-queue* nil)
(setf *http-server-listener* (mezzano.network.tcp:tcp-listen (mezzano.network.ip:make-ipv4-address "0.0.0.0")
port)
*http-server-thread* (mezzano.supervisor:make-thread (lambda () (http-server))
:name "HTTP server")))

(when (not *http-server-thread*)
(multiple-value-setq (*http-server-thread* *http-server-function* *http-server-connection-queue*)
(start-http-server)))
(unless *http-server-thread*
(start-http-server))

0 comments on commit 635e541

Please sign in to comment.