aboutsummaryrefslogtreecommitdiff
path: root/module/calp/server/server.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/calp/server/server.scm')
-rw-r--r--module/calp/server/server.scm34
1 files changed, 34 insertions, 0 deletions
diff --git a/module/calp/server/server.scm b/module/calp/server/server.scm
new file mode 100644
index 00000000..9c857b6d
--- /dev/null
+++ b/module/calp/server/server.scm
@@ -0,0 +1,34 @@
+(define-module (server server)
+ :use-module (util)
+ :use-module (web server)
+ :use-module ((server routes) :select (make-make-routes))
+ :use-module (ice-9 threads))
+
+;; NOTE The default make-default-socket is broken for IPv6.
+;; A patch has been submitted to the mailing list. 2020-03-31
+(module-set!
+ (resolve-module '(web server http))
+ 'make-default-socket
+ (lambda (family addr port)
+ (let ((sock (socket family SOCK_STREAM 0)))
+ (setsockopt sock SOL_SOCKET SO_REUSEADDR 1)
+ (bind sock family addr port)
+ sock)))
+
+(define handler (make-make-routes))
+
+;; (define impl (lookup-server-impl 'http))
+;; (define server (open-server impl open-params))
+
+
+(define-public (start-server open-params)
+ (run-server handler 'http open-params 1)
+ ;; NOTE at first this seems to work, but it quickly deteriorates.
+ ;; (for i in (iota 16)
+ ;; (begin-thread
+ ;; (let lp ((state (list 0)))
+ ;; (lp (serve-one-client handler impl server state)))))
+ ;; (pause)
+ )
+
+