Permalink
Browse files

Racket: new option to specify network interface for REPL server

In geiser-racket.sh, there's the new option -n, which uses a new
hostname argument accepted by geiser/user's start-geiser function.
  • Loading branch information...
1 parent 97f2fb5 commit 977335378247e8c7df0594fc300cb82c4ce6bbc7 @jaor committed Sep 8, 2012
Showing with 13 additions and 10 deletions.
  1. +3 −1 bin/geiser-racket.sh
  2. +6 −5 doc/repl.texi
  3. +4 −4 scheme/racket/geiser/user.rkt
@@ -9,11 +9,13 @@ exec racket -i -S "$top/racket" -l errortrace -cu "$0" ${1+"$@"}
(require (lib "cmdline.rkt"))
(define port (make-parameter 0))
+(define host (make-parameter #f (lambda (h) (and (string? h) h))))
(command-line
"run-racket.sh" (current-command-line-arguments)
(once-each
+ (("-n" "--hostname") n "Network hostname, or #f for all interfaces" (host n))
(("-p" "--port") p "Geiser server port" (port (string->number p)))))
(printf "Geiser server running at port ~a~%"
- ((dynamic-require 'geiser/server 'start-geiser) (port)))
+ ((dynamic-require 'geiser/server 'start-geiser) (port) (host)))
View
@@ -75,11 +75,12 @@ In Racket, you have to use the REPL server that comes with Geiser. To
that end, put Geiser's Racket @file{scheme} directory in Racket's
collection search path and invoke @code{start-geiser} (a procedure in
the module @code{geiser/server}) somewhere in your program, passing it
-the desired port. This procedure will start the REPL server in a
-separate thread. For an example of how to do that, see the script
-@file{bin/geiser-racket.sh} in the source distribution, or, if you've
-compiled Geiser, @file{bin/geiser-racket-noinst} in the build directory,
-or, if you've installed Geiser, @file{geiser-racket} in
+the desired port and, if desired, network interface name. This
+procedure will start the REPL server in a separate thread. For an
+example of how to do that, see the script @file{bin/geiser-racket.sh} in
+the source distribution, or, if you've compiled Geiser,
+@file{bin/geiser-racket-noinst} in the build directory, or, if you've
+installed Geiser, @file{geiser-racket} in
@file{<installation-prefix>/bin}. These scripts start a new interactive
Racket that is also running a REPL server (they also load the errortrace
library to provide better diagnostics, but that's not strictly needed).
@@ -110,18 +110,18 @@
(define server-channel (make-channel))
-(define (run-geiser-server port enforce-module-constants)
+(define (run-geiser-server port enforce-module-constants (hostname #f))
(run-server port
(lambda (in out)
(run-geiser-repl in out enforce-module-constants))
#f
void
(lambda (p _ __)
- (let ([lsner (tcp-listen p)])
+ (let ([lsner (tcp-listen p 4 #f hostname)])
(let-values ([(_ p __ ___) (tcp-addresses lsner #t)])
(channel-put server-channel p)
lsner)))))
-(define (start-geiser (port 0) (enforce-module-constants #f))
- (thread (lambda () (run-geiser-server port enforce-module-constants)))
+(define (start-geiser (port 0) (hostname #f) (enforce-module-constants #f))
+ (thread (lambda () (run-geiser-server port enforce-module-constants hostname)))
(channel-get server-channel))

0 comments on commit 9773353

Please sign in to comment.