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 []byte)
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 []byte)
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 []byte, err error)
46 }
47