当传递给{{clojure.core.server/remote-prepl}}的in-reader达到流末尾时,会尝试关闭套接字读取器。然而,由于(主要)套接字仍在被读取,这会阻塞主线程。
{code:none}
$ clj -J-Dclojure.server.jvm="{:port 5555 :accept clojure.core.server/io-prepl}" -r
Clojure 1.10.0
user=> (clojure.core.server/remote-prepl "127.0.0.1" 5555 *in* prn)
;; 如预期
1
{:tag :ret, :val 1, :ns "user", :ms 0, :form "1"}
^D ;; 挂起 - ^C 需要 结束进程
在这种情况下,我期望{{^D}}出现initial repl,类似于{{(clojure.core.server/io-prepl)}}的行为。
什么行得通
{code:none}
$ clj -J-Dclojure.server.jvm="{:port 5555 :accept clojure.core.server/io-prepl}" -r
Clojure 1.10.0
user=> (clojure.core.server/remote-prepl "127.0.0.1" 5555 *in* prn)
:repl/quit
^D
nil
user=> _
但是,从代码中看,这并不是预期能够终止prepl的方式。