     (if (stream-closed? socket)
       (dissoc-in state [:clients client] :socket)
       (do
-        (s/put! socket (dissoc p :client-dst))
+        (s/try-put! socket (dissoc p :client-dst) 100)
         state))))
 
 (defn- send-pkt

  (if (stream-open? (:socket peer))
    [id peer]
    (-> (d/let-flow [socket (client (:hostname peer) (:port peer))
                     _ (s/put! socket {:src (:id state) :type :peering-handshake})]
          (s/connect socket (:rx-stream state) {:downstream? false})
          [id (assoc peer :socket socket)])
        (d/catch (fn [ex]

  "Returns a function that will handle the handshake for incoming connections."
  [state]
  (fn [s info]
    (d/let-flow [handshake (s/take! s 100)]
     (-> ((condp = (:type handshake)
            :peering-handshake connect-peer-socket!
            :table-tennis connect-table-tennis-socket
