code: func (s *Server) reader(ctx context.Context) {
  	for {
  		v, _, err := s.conn.Read()
  		if err != nil {
  			return
  		}
  
  		h := header(v)
  		if !h.isValid() || h.op() != opRequest {
  			continue
  		}
  		xid := h.xid()
  
  		// Fan out the packet to a handler goroutine.
  		//
  		// Use a consistent handler for a given xid, so that
  		// packets from a particular client are processed
  		// in order.
  		ch := s.handlers[int(xid)%len(s.handlers)]
  		select {
  		case <-ctx.Done():
  			return
  		case ch <- h:
  		default:
  			// drop the packet
  		}
  	}
  }
docs: // reader listens for all incoming DHCP packets and fans them out to
  // handling goroutines based on XID as session identifiers.