             [clojure.java.io :as io]
             [clojure.pprint :refer [pprint]]
             [clojure.core.async :as async
-             :refer [<! go chan >! close! alts!]]))
+             :refer [<! <!! go chan >! close! alts!]]))
 
 (defn server-socket
   "Opens a ServerSocketChannel listening on the specified TCP `port` then

             config {}]
        (let [[val ch] (alts!
                        (conj
                         (map #(vector (:chan %) :ready) backends)
                         config-ch
                         shutdown))]
          (cond (= ch config-ch)

  "a channel that accepts nio SocketChannels and relays the data being sent to them onto a new connection to host:port"
  [host port]
  (let [ch (chan)]
    (future
      (loop []
        (let [socketchannel (.accept (<!! ch))]
          (when socketchannel
            (when (instance? SocketChannel socketchannel)
              (relay-to-backend socketchannel host port)
