   "Starts a following process listening on host:port"
   [host port]
   (println "connecting to host...")
+  ; first connect to lead computer
   (let [lead (connect host port)]
     (println "connected to host!\n")
     (println "waiting for all other computers to connect...\n")
+    ; recieve machine number and bounds while conveniently waiting for lead to send info
     (let [my-num (int(<!! (:in lead)))
           bounds (mapv int (<!! (:in lead)))
           chunk  (s/gen-table bounds)]
+      ; wait for start signal
       (when-let [start? (<!! (:in lead))]
+        ; run sieve listening on lead channels
         (s/sieve-e my-num false (:in lead) chunk (:out lead))
+        ; then wait for kill signal
         (println "Waiting for kill signal...")
         (while (not= 0 (<!! (:in lead)))
           (<!! (timeout 50)))
+        ; Then close the channels and socket
         (do (a/close! (:in lead))
-            (a/close! (:out lead)))
+            (a/close! (:out lead))
+            (.close (:socket lead)))
         (println "Done!")))))
 
 (defn -main


(defn connect
  "Takes: server - host ip to connect to
          port   - port to connect to"
  [server port]
  (let [socket (Socket. server port)
        in (-> socket

                 bounds  (get chunks (inc mi))]] ; first chunk is for lead
       (do
         (write machine (+ mi 2))
         (write machine bounds)
         (write machine 1))))
    ; Now we can start the sieve
    (s/sieve-e 1 true (chan 10) lead-chunk send-chan)
    (println "Waiting for other machines to finish...\n")
