   ([] (connect "127.0.0.1" 57711))
   ([port] (connect "127.0.0.1" port))
   ([host port]
-     (when-not (= :connecting @connection-status*)
+     (when-not (or (= :booting @connection-status*)
+                   (= :disconnected @connection-status*))
        (dosync
         (ref-set connection-status* :disconnected))
        (throw (Exception. "Can't connect as a server is already connected/connecting!")))

         (throw (Exception. "Can't boot as a server is already connected/connecting!")))

       (dosync
        (ref-set connection-status* :connecting))

       (dosync
        (ref-set connection-info*

  "Boot the audio server in an external process and tell it to listen on
  a specific port."
  ([port opts]
     (when-not (= :booting @connection-status*)
       (throw (Exception. "Can't boot external server as a server is already connected/connecting!")))
     (log/debug "booting external server")
     (let [full-opts (merge-sc-args opts {:port port})
           cmd       (sc-command full-opts)

           sc-thread (if (windows-os?)
                       (Thread. #(external-booter cmd (windows-sc-path)))
                       (Thread. #(external-booter cmd)))]
       (.setDaemon sc-thread true)
       (println "--> Booting external SuperCollider server...")
       (log/debug (str "Booting SuperCollider server (scsynth) with cmd: " (apply str (interleave cmd (repeat " ")))))
       (.start sc-thread)
       (dosync (ref-set server-thread* sc-thread)
               (alter connection-info* assoc :opts full-opts))
       (connect "127.0.0.1" port)
       :booting)))

(defn- transient-connection-info
  "Build the connection-info for booting an internal or external server."
