- (print "Gopher server listening on port " gopher-server-port " ...")
- (let-values (((in-port out-port) (tcp-accept listener)))
- (let* ((line (read-line in-port))
- (selector (string-trim-both line)))
- (let-values (((local-ip remote-ip) (tcp-addresses in-port)))
- (print "Accepted connection from " remote-ip
- " on " (seconds->string)))
- (with-output-to-port out-port
- (lambda ()
- (retrieve-selector
- (if (= (string-length selector) 0)
- "/"
- selector)
- gopher-root
- gopher-server-hostname
- gopher-server-port)))
- (print "... retrieved selector '" selector "'. Closing connection."))
- (close-input-port in-port)
- (close-output-port out-port))
- (tcp-close listener))
- (run-server))
+ (let loop ()
+ (let-values (((in-port out-port) (tcp-accept listener)))
+ (let* ((line (read-line in-port))
+ (selector (string-trim-both line)))
+ (let-values (((local-ip remote-ip) (tcp-addresses in-port)))
+ (print "Accepted connection from " remote-ip
+ " on " (seconds->string)))
+ (with-output-to-port out-port
+ (lambda ()
+ (retrieve-selector
+ (if (= (string-length selector) 0)
+ "/"
+ selector)
+ gopher-root
+ gopher-server-hostname
+ gopher-server-port)))
+ (print "... retrieved selector '" selector "'. Closing connection."))
+ (close-input-port in-port)
+ (close-output-port out-port))
+ (loop))
+ (tcp-close listener)))