code: func NewServer(ctx context.Context, c conn, addrs []tcpip.Address, cfg Config) (*Server, error) {
  	if cfg.ServerAddress == "" {
  		return nil, fmt.Errorf("dhcp: server requires explicit server address")
  	}
  	s := &Server{
  		conn:    c,
  		addrs:   addrs,
  		cfg:     cfg,
  		cfgopts: cfg.encode(),
  		broadcast: tcpip.FullAddress{
  			Addr: "\xff\xff\xff\xff",
  			Port: ClientPort,
  		},
  
  		handlers: make([]chan header, 8),
  		leases:   make(map[tcpip.LinkAddress]serverLease),
  	}
  
  	for i := 0; i < len(s.handlers); i++ {
  		ch := make(chan header, 8)
  		s.handlers[i] = ch
  		go s.handler(ctx, ch)
  	}
  
  	go s.expirer(ctx)
  	go s.reader(ctx)
  	return s, nil
  }
docs: // NewServer creates a new DHCP server and begins serving.
  // The server continues serving until ctx is done.