Skip to content

Instantly share code, notes, and snippets.

@rwat
Created August 18, 2010 13:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rwat/534794 to your computer and use it in GitHub Desktop.
Save rwat/534794 to your computer and use it in GitHub Desktop.
(import '(java.net InetAddress
InetSocketAddress
DatagramPacket
DatagramSocket))
(defn create-udp-server [& {:keys [local-ip local-port remote-ip remote-port]}]
(let [s (InetSocketAddress. (InetAddress/getByName local-ip) local-port)
r (InetSocketAddress. (InetAddress/getByName remote-ip) remote-port)
d (DatagramSocket. s)
udp-server (ref d)]
; Because the following operation is lexically isolated, from a
; concurrency point-of-view this side-effect is safe to perform.
(. @udp-server connect r)
; return the ref to the DatagramSocket
udp-server))
(defn close-udp-server [udp-server]
(.close @udp-server)
(dosync udp-server nil))
; WIP
(defn send-udp [udpserver] nil)
; WIP
(defn receive-udp [udpserver] nil)
;;;
(def listener (create-udp-server :local-ip "127.0.0.1", :local-port 29000
:remote-ip "127.0.0.1", :remote-port 29001))
(def sender (create-udp-server :local-ip "127.0.0.1", :local-port 29001
:remote-ip "127.0.0.1", :remote-port 29000))
(close-udp-server listener)
(close-udp-server sender)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment