 
 (defn send-partial [#^ZMQ$Socket socket message]
   "I'm seeing this as a way to send all the messages in an envelope, except the last."
-  (send socket message +send-more+))
+  (send socket message (const :send-more)))
 
 (defn send-all [#^ZMQ$Socket socket messages]
   "At this point, I'm basically envisioning the usage here as something like HTTP.

     (try ~@body
          (finally (.term ~id)))))

;; Non-blocking send/recv
(def +no-block+ ZMQ/NOBLOCK)
(def +dont-wait+ ZMQ/DONTWAIT)

;; More message parts are coming
(def +sndmore+ ZMQ/SNDMORE)
;; This next "constant" conflicts with the send-more function defined below.
;; Hmm.
(comment (def send-more ZMQ/SNDMORE))
(def +send-more+ ZMQ/SNDMORE)

;;; Socket types
;; Request/Reply
(def req ZMQ/REQ)
(def rep ZMQ/REP)
;; Publish/Subscribe
(def pub ZMQ/PUB)
(def sub ZMQ/SUB)
;; Extended Publish/Subscribe
(def x-pub ZMQ/XPUB)
(def x-sub ZMQ/XSUB)
;; Push/Pull
(def push ZMQ/PUSH)
(def pull ZMQ/PULL)
;; Internal 1:1
(def pair ZMQ/PAIR)

;; Router/Dealer

;; Creates/consumes request-reply routing envelopes.
;; Lets you route messages to specific connections if you
;; know their identities.
(def router ZMQ/ROUTER)
;; Combined ventilator/sink.
;; Does load balancing on output and fair-queuing on input.
;; Can shuffle messages out to N nodes then shuffle the replies back.
;; Raw bidirectional async pattern.
(def dealer ZMQ/DEALER)
;; Obsolete names for Router/Dealer
(def xreq ZMQ/XREQ)
(def xrep ZMQ/XREP)

(defn socket
  [#^ZMQ$Context context type]

      (identify socket (str (.nextLong rdn) "-" (.nextLong rdn) n))))
  ([#^ZMQ$Socket socket]
     (set-id socket 0)))

