Documentation
¶
Index ¶
- Variables
- func Close()
- func CurrentDialer() *fastdialer.Dialer
- func GlobalGuardBytesBufferAlloc() error
- func GlobalRestoreBytesBufferAlloc()
- func GuardThreadsOrDefault(current int) int
- func Init(options *types.Options) error
- func IsLowOnMemory() bool
- func NewDialer(options *types.Options) (*fastdialer.Dialer, error)
- func StartActiveMemGuardian(ctx context.Context)
- func StopActiveMemGuardian()
Constants ¶
This section is empty.
Variables ¶
var ( MaxThreadsOnLowMemory = env.GetEnvOrDefault("MEMGUARDIAN_THREADS", 30) MaxBytesBufferAllocOnLowMemory = env.GetEnvOrDefault("MEMGUARDIAN_ALLOC", 200) )
var Dialer *fastdialer.Dialer
Dialer is a shared fastdialer instance for host DNS resolution. Prefer CurrentDialer() for reads; the variable is exported for backward compatibility but is mutated under mu.
var ErrDialerPolicyConflict = errors.New(
"network dialer already initialized with a different network policy; " +
"concurrent scans cannot use conflicting exclude/resolver settings")
ErrDialerPolicyConflict is returned by Init when the shared dialer already exists and was built from a DIFFERENT network policy.
The dialer is process-global and built once, from whichever options reached Init first. Every later Init silently adopted it. For a deny list that is the wrong direction to fail: a second scan configured to refuse a host would reuse a dialer that allows it, and nothing would say so. The tripwire fails closed instead — the caller learns its policy cannot be honoured rather than running under someone else's.
No current behaviour changes: ExcludeTargets, RestrictLocalNetworkAccess, SystemResolvers, DialerTimeout and DialerKeepAlive are not assigned anywhere in the tree, so every Init today computes the same key. This exists so the first code to wire one of them cannot land the silent-inheritance bug with it; the real fix (a scan-local dialer) is a larger change.
Functions ¶
func Close ¶
func Close()
Close releases one reference to the global shared fastdialer. The dialer is closed and reset to nil only when the final reference is released, allowing a later Init() to re-create it. Extra Close() calls (more than Init()) are ignored rather than tearing down a dialer still in use.
func CurrentDialer ¶
func CurrentDialer() *fastdialer.Dialer
CurrentDialer returns the shared dialer (nil if not initialized), read under the lock so it doesn't race with Init/Close.
func GlobalGuardBytesBufferAlloc ¶
func GlobalGuardBytesBufferAlloc() error
GlobalGuardBytesBufferAlloc reduces buffer pool size when memory is low
func GlobalRestoreBytesBufferAlloc ¶
func GlobalRestoreBytesBufferAlloc()
GlobalRestoreBytesBufferAlloc restores buffer pool size when memory is normal
func GuardThreadsOrDefault ¶
GuardThreadsOrDefault returns reduced thread count when memory is low
func Init ¶
Init creates the global Dialer instance based on user configuration, or reuses the existing one, and registers one reference. Every successful Init must be paired with exactly one Close.
Reuse requires the SAME network policy: an Init whose policy differs from the live dialer's returns ErrDialerPolicyConflict and takes no reference, so the caller must not Close. See ErrDialerPolicyConflict.
func IsLowOnMemory ¶
func IsLowOnMemory() bool
func NewDialer ¶
func NewDialer(options *types.Options) (*fastdialer.Dialer, error)
NewDialer creates a new fastdialer instance based on user configuration.
func StartActiveMemGuardian ¶
func StopActiveMemGuardian ¶
func StopActiveMemGuardian()
Types ¶
This section is empty.