// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1

package config

import (
	"fmt"
)

// checkLimitsFromMaxConnsPerClient check that value provided might be OK
// return an error if values are not compatible
func checkLimitsFromMaxConnsPerClient(maxConnsPerClient int) error {
	maxFds, err := getrlimit()
	if err == nil && maxConnsPerClient > 0 {
		// We need the list port + a few at the minimum
		// On Mac OS, 20 FDs are open by Consul without doing anything
		requiredFds := uint64(maxConnsPerClient + 20)
		if maxFds < requiredFds {
			return fmt.Errorf("system allows a max of %d file descriptors, but limits.http_max_conns_per_client: %d needs at least %d", maxFds, maxConnsPerClient, requiredFds)
		}
	}
	return err
}