Skip to content

Instantly share code, notes, and snippets.

@jelmerderonde
Last active February 22, 2022 09:43
Show Gist options
  • Save jelmerderonde/c4a466563c703e856bd128d7982f48b3 to your computer and use it in GitHub Desktop.
Save jelmerderonde/c4a466563c703e856bd128d7982f48b3 to your computer and use it in GitHub Desktop.
Start Clojure Socket REPL server and write the port number into .repl-port

In your ~/.clojure/deps.edn, add an alias like this:

:socket {:extra-deps {jlmr/socket {:git/url "https://gist.github.com/jelmerderonde/c4a466563c703e856bd128d7982f48b3"
                                   :sha "81d80c5ebec3f2240eaf82a6d6e26eee93da4c6a"}}
         :exec-fn socket/start-server
         :exec-args {:name "server"
                     :port 0
                     :accept clojure.core.server/repl
                     :server-daemon false}}

Then, on the command line, run:

$ clojure -X:socket
{:paths ["."]}
(ns socket
(:require
[clojure.core.server :as server]
[clojure.java.io :as io]))
(defn start-server
[opts]
(let [server (server/start-server opts)
port (.getLocalPort server)
host (-> server .getInetAddress .getCanonicalHostName)
port-file (io/file ".repl-port")]
(.deleteOnExit port-file)
(spit port-file port)
(printf "Socket server listening on %s:%s\n" host port)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment