Source file src/internal/nettrace/nettrace.go

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package nettrace contains internal hooks for tracing activity in
     6  // the net package. This package is purely internal for use by the
     7  // net/http/httptrace package and has no stable API exposed to end
     8  // users.
     9  package nettrace
    10  
    11  // TraceKey is a context.Context Value key. Its associated value should
    12  // be a *Trace struct.
    13  type TraceKey struct{}
    14  
    15  // LookupIPAltResolverKey is a context.Context Value key used by tests to
    16  // specify an alternate resolver func.
    17  // It is not exposed to outsider users. (But see issue 12503)
    18  // The value should be the same type as lookupIP:
    19  //
    20  //	func lookupIP(ctx context.Context, host string) ([]IPAddr, error)
    21  type LookupIPAltResolverKey struct{}
    22  
    23  // Trace contains a set of hooks for tracing events within
    24  // the net package. Any specific hook may be nil.
    25  type Trace struct {
    26  	// DNSStart is called with the hostname of a DNS lookup
    27  	// before it begins.
    28  	DNSStart func(name string)
    29  
    30  	// DNSDone is called after a DNS lookup completes (or fails).
    31  	// The coalesced parameter is whether singleflight de-duped
    32  	// the call. The addrs are of type net.IPAddr but can't
    33  	// actually be for circular dependency reasons.
    34  	DNSDone func(netIPs []any, coalesced bool, err error)
    35  
    36  	// ConnectStart is called before a Dial, excluding Dials made
    37  	// during DNS lookups. In the case of DualStack (Happy Eyeballs)
    38  	// dialing, this may be called multiple times, from multiple
    39  	// goroutines.
    40  	ConnectStart func(network, addr string)
    41  
    42  	// ConnectDone is called after a Dial with the results, excluding
    43  	// Dials made during DNS lookups. It may also be called multiple
    44  	// times, like ConnectStart.
    45  	ConnectDone func(network, addr string, err error)
    46  }
    47  

View as plain text