code: func incoming(c *client) {
  	var err error
  	var cp packets.ControlPacket
  
  	defer c.workers.Done()
  
  	DEBUG.Println(NET, "incoming started")
  
  	for {
  		if cp, err = packets.ReadPacket(c.conn); err != nil {
  			break
  		}
  		DEBUG.Println(NET, "Received Message")
  		select {
  		case c.ibound <- cp:
  			// Notify keepalive logic that we recently received a packet
  			if c.options.KeepAlive != 0 {
  				c.lastReceived.Store(time.Now())
  			}
  		case <-c.stop:
  			// This avoids a deadlock should a message arrive while shutting down.
  			// In that case the "reader" of c.ibound might already be gone
  			WARN.Println(NET, "incoming dropped a received message during shutdown")
  			break
  		}
  	}
  	// We received an error on read.
  	// If disconnect is in progress, swallow error and return
  	select {
  	case <-c.stop:
  		DEBUG.Println(NET, "incoming stopped")
  		return
  	// Not trying to disconnect, send the error to the errors channel
  	default:
  		ERROR.Println(NET, "incoming stopped with error", err)
  		signalError(c.errors, err)
  		return
  	}
  }
docs: // actually read incoming messages off the wire
  // send Message object into ibound channel