babashka/test-resources/domain_sockets.bb

42 lines
1 KiB
BlitzBasic
Raw Normal View History

(import java.net.UnixDomainSocketAddress
java.net.StandardProtocolFamily
[java.nio.channels ServerSocketChannel SocketChannel])
(require '[clojure.java.io :as io]
'[babashka.fs])
(def sockaddr (UnixDomainSocketAddress/of
(-> (doto (fs/file (fs/temp-dir) "server.socket")
(.deleteOnExit))
str)))
;; server
(def server
(future
(let [ch (ServerSocketChannel/open StandardProtocolFamily/UNIX)]
(.bind ch sockaddr)
(.accept ch))))
(Thread/sleep 100)
;; client
(let [ch (SocketChannel/open StandardProtocolFamily/UNIX)
ch (loop [retry 0]
(let [v (try (.connect ch sockaddr)
(catch Exception e e))]
(if (instance? Exception v)
(if (< retry 10)
(do (Thread/sleep 100)
(recur (inc retry)))
(throw v))
v)))]
#_(prn :ch ch)
#_(.close ch))
@server
(when-not (System/getProperty "babashka.version")
(shutdown-agents))
:success