code: func (c *client) Disconnect(quiesce uint) {
  	status := atomic.LoadUint32(&c.status)
  	if status == connected {
  		DEBUG.Println(CLI, "disconnecting")
  		c.setConnected(disconnected)
  
  		dm := packets.NewControlPacket(packets.Disconnect).(*packets.DisconnectPacket)
  		dt := newToken(packets.Disconnect)
  		c.oboundP <- &PacketAndToken{p: dm, t: dt}
  
  		// wait for work to finish, or quiesce time consumed
  		dt.WaitTimeout(time.Duration(quiesce) * time.Millisecond)
  	} else {
  		WARN.Println(CLI, "Disconnect() called but not connected (disconnected/reconnecting)")
  		c.setConnected(disconnected)
  	}
  
  	c.disconnect()
  }
docs: // Disconnect will end the connection with the server, but not before waiting
  // the specified number of milliseconds to wait for existing work to be
  // completed.