blob: 18e01d99e10a58744c248d88c2ddde7ad1aa3211 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
(define-module (repl)
:use-module (system repl server)
:use-module (ice-9 regex)
:use-module ((util hooks) :select (shutdown-hook))
:use-module (util exceptions)
)
(define-public (runtime-dir)
(or (getenv "XDG_RUNTIME_DIR")
"/tmp"))
(define-public (repl-start address)
(define lst (string->list address))
(format (current-error-port)
"Starting REPL server at ~a~%" address)
(spawn-server
(case (cond [(memv (car lst) '(#\. #\/)) 'UNIX]
[(string-match "(\\d{1,3}\\.){3}\\d{1,3}(:\\d+)?" address) 'IPv4]
;; IPv6 is as of Gulie 2.2 not supported by make-tcp-server-socket.
;; This might be the same problem as I encountered in my html server.
[else 'UNIX])
[(UNIX)
(add-hook! shutdown-hook (lambda () (catch 'system-error (lambda () (delete-file address))
(lambda (err proc fmt . args)
(warning "Failed to unlink ~a" address args)
err))))
(make-unix-domain-server-socket path: address)]
[(IPv4) (apply (case-lambda
[() (error "Empty address?")]
[(address) (make-tcp-server-socket host: address)]
[(address port) (make-tcp-server-socket host: address port: port)])
(string-split address #\:))]
;; currently impossible
[(IPv6) (error "How did you get here?")])))
|