   "Close the connection"
   [client :- Client]
   (let [{:keys [should-stop websocket-client websocket-connection]} client]
+    ;; NOTE:  This true value is also the sentinel for make-connection
     (deliver should-stop true)
     (when (contains? #{:opening :open} (state client))
       (log/debug "Closing")
       (reset! (:state client) :closing)
       (.stop websocket-client))
-    (when (realized? @websocket-connection)
-      (ws/close @@websocket-connection))
-    true))
+    (if (and (realized? @websocket-connection) (not (= true @@websocket-connection)))
+      (ws/close @@websocket-connection)))
+  true)

        client (merge params {:identity (make-identity cert type)
                              :state (atom :connecting :validator ws-state?)
                              :websocket-client (make-websocket-client params)
                              :websocket-connection (atom (future "To be a connection later"))
                              :handlers handlers
                              :should-stop (promise)})
        {:keys [websocket-connection]} client]

          :handlers Handlers
          :should-stop Object ;; promise that when delivered means should stop
          :websocket-client Object
          :websocket-connection Object ;; atom of a promise that will be a connection or true
          }))

;; connection state checkers
(s/defn ^:always-validate state :- (s/pred ws-state?)
