another pointless yak shave: autodetect hostname
This commit is contained in:
parent
de032b9237
commit
2d1b6e864e
|
@ -865,7 +865,8 @@
|
|||
listen-addr (config-get 'listen-port integer?)))
|
||||
(define public-addr
|
||||
(match (config-get 'public-addr (or/c 'auto string?))
|
||||
['auto (error "TODO auto public-addr unimplemented")]
|
||||
['auto (with-handlers ([exn:fail? (lambda (_) (error "failed to autodetect hostname"))])
|
||||
(get-hostname))]
|
||||
[addr addr]))
|
||||
(define public-port
|
||||
(match (config-get 'public-port (or/c 'auto integer?))
|
||||
|
|
|
@ -86,9 +86,9 @@
|
|||
;; misc ffi calls not provided by racket (because ????)
|
||||
;; racket should have fsync like cmon
|
||||
(module+ misc-calls
|
||||
(require ffi/unsafe/port racket/match)
|
||||
(require ffi/unsafe/port ffi/vector racket/list racket/match racket/string)
|
||||
|
||||
(provide port-fsync count-cpus current-seconds-monotonic)
|
||||
(provide port-fsync count-cpus current-seconds-monotonic get-hostname)
|
||||
|
||||
;; XXX : platform-specific behavior
|
||||
|
||||
|
@ -120,6 +120,24 @@
|
|||
['unix (port-fsync/unix port)]
|
||||
[x (error "don't know how to fsync on" x)]))
|
||||
|
||||
(define get-hostname/unix
|
||||
(let ([gethostname-call #f])
|
||||
(lambda ()
|
||||
(when (false? gethostname-call)
|
||||
(set! gethostname-call
|
||||
(get-ffi-obj/runtime "gethostname" (get-libc/init)
|
||||
(_fun #:save-errno 'posix (name : (_bytes o 256)) (size : _int = 256)
|
||||
-> (res : _int)
|
||||
-> (if (zero? res)
|
||||
(cast name _bytes _string/utf-8)
|
||||
(raise (exn:fail (format "gethostname: errno ~a" (saved-errno))
|
||||
(current-continuation-marks))))))))
|
||||
(gethostname-call))))
|
||||
|
||||
(define (get-hostname)
|
||||
(match (system-type 'os)
|
||||
['unix (get-hostname/unix)]
|
||||
[x (error "don't know how to get-hostname on" x)]))
|
||||
|
||||
;; this provides an actual count of the number of CPUs on the system, even without
|
||||
;; --enable-futures by hooking into the underlying rktio call that gets skipped when the current
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
(listen-addr "0.0.0.0")
|
||||
(listen-port 25446)
|
||||
;; the "public" ip (or domain name) and port of this node
|
||||
;; - auto for addr selects the first interface addr (linux only)
|
||||
;; - auto for addr uses /etc/hostname, if present (linux only)
|
||||
;; - auto for port uses the same as listen-port
|
||||
(public-addr "127.0.0.1")
|
||||
(public-addr auto)
|
||||
(public-port auto))
|
||||
|
|
Loading…
Reference in New Issue