title: Remove client from a list kills other connections
body: <p>Why kill a simple "ClientList.Remove(entry)" all connections from other clients ?</p>
  
  <p>I have a very simple Go TCP Server that makes connectionhandling and loginhandling.
  After that if creates a Client and start a GO Routine with the TCP Client.</p>
  
  <p>newClient := &amp;Client{"", "", login.LoginToken, conn}
  go ClientReader(newClient)
  ClientList.PushBack(*newClient)</p>
  
  <p>The Go routine read all incoming data.
  And when the Connection have a timeout or a networkchange ( the client get new IP )
  it removes the Client from the clientlist.</p>
  
  <p>but when it remove the client from the list .... all other client connections are dead ?
  in the loop it find the right client and remove it.</p>
  
  <p>look at removeloop: </p>
  
  <p>Routine:</p>
  
  <pre><code>func ClientReader(client *Client) {
      buffer := make([]byte, 2048)
      for {
          bytesRead, error := client.Conn.Read(buffer)
      if error != nil {
          Log(error)
          break
      }
  
      var m Message
      err := json.Unmarshal([]byte(buffer[0:bytesRead]), &amp;m)
      if err != nil {
          Log(err)
      } else {
  
          switch m.Cmd {
          case "Message":
  
          case "Ping":
              Log("Ping from: ", client.Name, " on ", client.Conn.RemoteAddr())
              client.Conn.SetDeadline(time.Now().Add(25 * time.Second))
              pong := []byte(`{"PONG":"..."}` + "\r\n")
              client.Conn.Write(pong)
              Log("PONG: " + time.Now().Format(time.RFC850))
              Log("User Online: " + strconv.Itoa(ClientList.Len()))
              Log("Goroutines: " + strconv.Itoa(runtime.NumGoroutine()))
  
          default:
              Log("Not supported Command: ", m.Cmd)
              clienterror := []byte(`{"Err":"Command not supported"}` + "\r\n")
              client.Conn.Write(clienterror)
          }
          for i := 0; i &lt; 2048; i++ {
              buffer[i] = 0x00
          }
      }
  
  }
  
  RemoveLoop:
      for entry := ClientList.Front(); entry != nil; entry = entry.Next() {
          listclient := entry.Value.(Client)
          if client.Conn.RemoteAddr() == listclient.Conn.RemoteAddr() {
          ClientList.Remove(entry)
          Log("## SEARCH: ", client.Name, client.Conn.RemoteAddr())
          Log("## FOUND: ", listclient.Name,listclient.Conn.RemoteAddr())
      Log("## REMOVED: ", entry.Value)
      break RemoveLoop
      }
  }
  Log("Exit Client Reader Routine ", client.Name, " on ", client.Conn.RemoteAddr())
  </code></pre>
  
  <p>} </p>