Michael Fraenkel has uploaded this change for review.
net: context aware network Dialer.Dial functions
Add context aware dial functions for TCP, UDP, IP and Unix networks.
Fixes #49097
Updates #59897
Change-Id: I7523452e8e463a587a852e0555cec822d8dcb3dd
---
M src/net/dial.go
M src/net/dial_test.go
M src/net/iprawsock.go
M src/net/tcpsock.go
M src/net/udpsock.go
M src/net/unixsock.go
6 files changed, 159 insertions(+), 15 deletions(-)
diff --git a/src/net/dial.go b/src/net/dial.go
index 58e3b39..f1d8d06 100644
--- a/src/net/dial.go
+++ b/src/net/dial.go
@@ -7,6 +7,7 @@
import (
"context"
"internal/nettrace"
+ "net/netip"
"syscall"
"time"
)
@@ -408,6 +409,7 @@
// sysDialer contains a Dial's parameters and configuration.
type sysDialer struct {
Dialer
+ localAddr Addr
network, address string
testHookDialTCP func(ctx context.Context, net string, laddr, raddr *TCPAddr) (*TCPConn, error)
}
@@ -442,6 +444,9 @@
// See func Dial for a description of the network and address
// parameters.
func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error) {
+ return d.dialContext(ctx, network, d.LocalAddr, address)
+}
+func (d *Dialer) dialContext(ctx context.Context, network string, laddr Addr, address string) (Conn, error) {
if ctx == nil {
panic("nil context")
}
@@ -481,9 +486,10 @@
}
sd := &sysDialer{
- Dialer: *d,
- network: network,
- address: address,
+ Dialer: *d,
+ localAddr: laddr,
+ network: network,
+ address: address,
}
var primaries, fallbacks addrList
@@ -496,6 +502,26 @@
return sd.dialParallel(ctx, primaries, fallbacks)
}
+func (d *Dialer) DialTCP(ctx context.Context, network string, laddr netip.AddrPort, raddr netip.AddrPort) (*TCPConn, error) {
+ conn, err := d.dialContext(ctx, network, TCPAddrFromAddrPort(laddr), raddr.String())
+ return conn.(*TCPConn), err
+}
+
+func (d *Dialer) DialUDP(ctx context.Context, network string, laddr netip.AddrPort, raddr netip.AddrPort) (*UDPConn, error) {
+ conn, err := d.dialContext(ctx, network, UDPAddrFromAddrPort(laddr), raddr.String())
+ return conn.(*UDPConn), err
+}
+
+func (d *Dialer) DialIP(ctx context.Context, network string, laddr netip.Addr, raddr netip.Addr) (*IPConn, error) {
+ conn, err := d.dialContext(ctx, network, IPAddrFromAddr(laddr), raddr.String())
+ return conn.(*IPConn), err
+}
+
+func (d *Dialer) DialUnix(ctx context.Context, network string, laddr *UnixAddr, raddr *UnixAddr) (*UnixConn, error) {
+ conn, err := d.dialContext(ctx, network, laddr, raddr.Name)
+ return conn.(*UnixConn), err
+}
+
// dialParallel races two copies of dialSerial, giving the first a
// head start. It returns the first established connection and
// closes the others. Otherwise it returns an error from the first
@@ -539,7 +565,7 @@
go startRacer(primaryCtx, true)
// Start the timer for the fallback racer.
- fallbackTimer := time.NewTimer(sd.fallbackDelay())
+ fallbackTimer := time.NewTimer(sd.Dialer.fallbackDelay())
defer fallbackTimer.Stop()
for {
@@ -580,7 +606,7 @@
for i, ra := range ras {
select {
case <-ctx.Done():
- return nil, &OpError{Op: "dial", Net: sd.network, Source: sd.LocalAddr, Addr: ra, Err: mapErr(ctx.Err())}
+ return nil, &OpError{Op: "dial", Net: sd.network, Source: sd.localAddr, Addr: ra, Err: mapErr(ctx.Err())}
default:
}
@@ -590,7 +616,7 @@
if err != nil {
// Ran out of time.
if firstErr == nil {
- firstErr = &OpError{Op: "dial", Net: sd.network, Source: sd.LocalAddr, Addr: ra, Err: err}
+ firstErr = &OpError{Op: "dial", Net: sd.network, Source: sd.localAddr, Addr: ra, Err: err}
}
break
}
@@ -629,11 +655,11 @@
defer func() { trace.ConnectDone(sd.network, raStr, err) }()
}
}
- la := sd.LocalAddr
+ la := sd.localAddr
switch ra := ra.(type) {
case *TCPAddr:
la, _ := la.(*TCPAddr)
- if sd.MultipathTCP() {
+ if sd.Dialer.MultipathTCP() {
c, err = sd.dialMPTCP(ctx, la, ra)
} else {
c, err = sd.dialTCP(ctx, la, ra)
diff --git a/src/net/dial_test.go b/src/net/dial_test.go
index d4db405..2e6fc50 100644
--- a/src/net/dial_test.go
+++ b/src/net/dial_test.go
@@ -13,6 +13,7 @@
"fmt"
"internal/testenv"
"io"
+ "net/netip"
"os"
"runtime"
"strings"
@@ -262,6 +263,7 @@
startTime := time.Now()
sd := &sysDialer{
Dialer: d,
+ localAddr: d.LocalAddr,
network: "tcp",
address: "?",
testHookDialTCP: dialTCP,
@@ -458,9 +460,10 @@
FallbackDelay: fallbackDelay,
}
sd := &sysDialer{
- Dialer: d,
- network: "tcp",
- address: "?",
+ Dialer: d,
+ localAddr: d.LocalAddr,
+ network: "tcp",
+ address: "?",
}
makeAddr := func(ip string) addrList {
@@ -1000,6 +1003,97 @@
})
}
+func TestDialContext(t *testing.T) {
+ switch runtime.GOOS {
+ case "plan9":
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ t.Run("StreamDial", func(t *testing.T) {
+ var err error
+ for i, network := range []string{"tcp", "tcp4", "tcp6", "unix", "unixpacket"} {
+ if !testableNetwork(network) {
+ continue
+ }
+ ln := newLocalListener(t, network)
+ defer ln.Close()
+ var id int
+ d := Dialer{ControlContext: func(ctx context.Context, network string, address string, c syscall.RawConn) error {
+ id = ctx.Value("id").(int)
+ return controlOnConnSetup(network, address, c)
+ }}
+ var c Conn
+ switch network {
+ case "tcp", "tcp4", "tcp6":
+ raddr, err := netip.ParseAddrPort(ln.Addr().String())
+ if err != nil {
+ t.Error(err)
+ continue
+ }
+ c, err = d.DialTCP(context.WithValue(context.Background(), "id", i+1), network, (*TCPAddr)(nil).AddrPort(), raddr)
+ case "unix", "unixpacket":
+ raddr, err := ResolveUnixAddr(network, ln.Addr().String())
+ if err != nil {
+ t.Error(err)
+ continue
+ }
+ c, err = d.DialUnix(context.WithValue(context.Background(), "id", i+1), network, nil, raddr)
+ }
+ if err != nil {
+ t.Error(err)
+ continue
+ }
+ if id != i+1 {
+ t.Errorf("got id %d, want %d", id, i+1)
+ }
+ c.Close()
+ }
+ })
+ t.Run("PacketDial", func(t *testing.T) {
+ var err error
+ for i, network := range []string{"udp", "udp4", "udp6", "unixgram"} {
+ if !testableNetwork(network) {
+ continue
+ }
+ c1 := newLocalPacketListener(t, network)
+ if network == "unixgram" {
+ defer os.Remove(c1.LocalAddr().String())
+ }
+ defer c1.Close()
+ var id int
+ d := Dialer{ControlContext: func(ctx context.Context, network string, address string, c syscall.RawConn) error {
+ id = ctx.Value("id").(int)
+ return controlOnConnSetup(network, address, c)
+ }}
+ var c2 Conn
+ switch network {
+ case "udp", "udp4", "udp6":
+ raddr, err := netip.ParseAddrPort(c1.LocalAddr().String())
+ if err != nil {
+ t.Error(err)
+ continue
+ }
+ c2, err = d.DialUDP(context.WithValue(context.Background(), "id", i+1), network, (*UDPAddr)(nil).AddrPort(), raddr)
+ case "unixgram":
+ raddr, err := ResolveUnixAddr(network, c1.LocalAddr().String())
+ if err != nil {
+ t.Error(err)
+ continue
+ }
+ c2, err = d.DialUnix(context.WithValue(context.Background(), "id", i+1), network, nil, raddr)
+ }
+ if err != nil {
+ t.Error(err)
+ continue
+ }
+ if id != i+1 {
+ t.Errorf("got id %d, want %d", id, i+1)
+ }
+ c2.Close()
+ }
+ })
+}
+
// mustHaveExternalNetwork is like testenv.MustHaveExternalNetwork
// except that it won't skip testing on non-mobile builders.
func mustHaveExternalNetwork(t *testing.T) {
diff --git a/src/net/iprawsock.go b/src/net/iprawsock.go
index f18331a..a4b5823 100644
--- a/src/net/iprawsock.go
+++ b/src/net/iprawsock.go
@@ -6,6 +6,7 @@
import (
"context"
+ "net/netip"
"syscall"
)
@@ -27,6 +28,13 @@
// BUG(mikio): On Windows, the File method of IPConn is not
// implemented.
+func IPAddrFromAddr(addr netip.Addr) *IPAddr {
+ return &IPAddr{
+ IP: addr.AsSlice(),
+ Zone: addr.Zone(),
+ }
+}
+
// IPAddr represents the address of an IP end point.
type IPAddr struct {
IP IP
@@ -209,11 +217,15 @@
// If the IP field of raddr is nil or an unspecified IP address, the
// local system is assumed.
func DialIP(network string, laddr, raddr *IPAddr) (*IPConn, error) {
+ return dialIP(context.Background(), network, laddr, raddr)
+}
+
+func dialIP(ctx context.Context, network string, laddr, raddr *IPAddr) (*IPConn, error) {
if raddr == nil {
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: nil, Err: errMissingAddress}
}
sd := &sysDialer{network: network, address: raddr.String()}
- c, err := sd.dialIP(context.Background(), laddr, raddr)
+ c, err := sd.dialIP(ctx, laddr, raddr)
if err != nil {
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: raddr.opAddr(), Err: err}
}
diff --git a/src/net/tcpsock.go b/src/net/tcpsock.go
index 358e487..b389ffe 100644
--- a/src/net/tcpsock.go
+++ b/src/net/tcpsock.go
@@ -258,6 +258,10 @@
// If the IP field of raddr is nil or an unspecified IP address, the
// local system is assumed.
func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) {
+ return dialTCP(context.Background(), network, laddr, raddr)
+}
+
+func dialTCP(ctx context.Context, network string, laddr, raddr *TCPAddr) (*TCPConn, error) {
switch network {
case "tcp", "tcp4", "tcp6":
default:
@@ -267,7 +271,7 @@
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: nil, Err: errMissingAddress}
}
sd := &sysDialer{network: network, address: raddr.String()}
- c, err := sd.dialTCP(context.Background(), laddr, raddr)
+ c, err := sd.dialTCP(ctx, laddr, raddr)
if err != nil {
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: raddr.opAddr(), Err: err}
}
diff --git a/src/net/udpsock.go b/src/net/udpsock.go
index e30624d..aeec8ff 100644
--- a/src/net/udpsock.go
+++ b/src/net/udpsock.go
@@ -288,6 +288,10 @@
// If the IP field of raddr is nil or an unspecified IP address, the
// local system is assumed.
func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error) {
+ return dialUDP(context.Background(), network, laddr, raddr)
+}
+
+func dialUDP(ctx context.Context, network string, laddr, raddr *UDPAddr) (*UDPConn, error) {
switch network {
case "udp", "udp4", "udp6":
default:
@@ -297,7 +301,7 @@
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: nil, Err: errMissingAddress}
}
sd := &sysDialer{network: network, address: raddr.String()}
- c, err := sd.dialUDP(context.Background(), laddr, raddr)
+ c, err := sd.dialUDP(ctx, laddr, raddr)
if err != nil {
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: raddr.opAddr(), Err: err}
}
diff --git a/src/net/unixsock.go b/src/net/unixsock.go
index 14fbac0..000267a 100644
--- a/src/net/unixsock.go
+++ b/src/net/unixsock.go
@@ -201,13 +201,17 @@
// If laddr is non-nil, it is used as the local address for the
// connection.
func DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error) {
+ return dialUnix(context.Background(), network, laddr, raddr)
+}
+
+func dialUnix(ctx context.Context, network string, laddr, raddr *UnixAddr) (*UnixConn, error) {
switch network {
case "unix", "unixgram", "unixpacket":
default:
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: raddr.opAddr(), Err: UnknownNetworkError(network)}
}
sd := &sysDialer{network: network, address: raddr.String()}
- c, err := sd.dialUnix(context.Background(), laddr, raddr)
+ c, err := sd.dialUnix(ctx, laddr, raddr)
if err != nil {
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: raddr.opAddr(), Err: err}
}
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Ian Lance Taylor, Michael Fraenkel.
4 comments:
Patchset:
Thanks.
File src/net/dial.go:
Patch Set #1, Line 412: localAddr Addr
This is confusing, because there's now sysDialer.LocalAddr (by way of the embedded Dialer), and sysDialer.localAddr. I don't have any confidence we'll pick the right one in any future code that touches this.
The Dialer.DialTCP (etc.) functions in the accepted proposal are a bit weird, because they take a laddr parameter that presumably overrides Dialer.LocalAddr. I'd say that this is a mistake, but the parameter is a netip.AddrPort rather than a LocalAddr, so there's perhaps a good reason for the inconsistency.
Assuming Dialer.DialTCP takes a laddr parameter, I think we should pass it down the call stack as a parameter rather than adding a field here.
Patch Set #1, Line 449: func (d *Dialer) dialContext(ctx context.Context, network string, laddr Addr, address string) (Conn, error) {
I think this is the wrong place to hook in DialTCP (etc.). DialContext resolves am address and dials it, handling the possibility of the address string resolving to multiple IP addresses.
DialTCP doesn't need to resolve any addresses; it's working on an already resolved IP address. It doesn't need to handle multiple targets.
I think Dialer.DialTCP should call Dialer.dialSingle, or possibly we should factor out a version of net.DialTCP that takes a Context parameter.
These all need doc comments.
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Ian Lance Taylor, Michael Fraenkel.
Michael Fraenkel uploaded patch set #2 to this change.
net: context aware network Dialer.Dial functions
Add context aware dial functions for TCP, UDP, IP and Unix networks.
Fixes #49097
Updates #59897
Change-Id: I7523452e8e463a587a852e0555cec822d8dcb3dd
---
M src/net/dial.go
M src/net/dial_test.go
M src/net/iprawsock.go
M src/net/tcpsock.go
M src/net/udpsock.go
M src/net/unixsock.go
6 files changed, 226 insertions(+), 27 deletions(-)
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Ian Lance Taylor, Michael Fraenkel.
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Damien Neil, Ian Lance Taylor.
4 comments:
Patchset:
What's the status of this CL? Any updates?
All comments are addressed.
File src/net/dial.go:
Patch Set #1, Line 412: localAddr Addr
This is confusing, because there's now sysDialer. […]
Acknowledged
Patch Set #1, Line 449: func (d *Dialer) dialContext(ctx context.Context, network string, laddr Addr, address string) (Conn, error) {
I think this is the wrong place to hook in DialTCP (etc.). […]
Acknowledged
These all need doc comments.
Acknowledged
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Damien Neil, Ian Lance Taylor, Michael Fraenkel.
Patch set 2:Run-TryBot +1
1 comment:
Patchset:
All comments are addressed.
Great, thanks!
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Damien Neil, Michael Fraenkel.
1 comment:
Patchset:
Please rebase to tip. Thanks.
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Damien Neil, Michael Fraenkel.
Patch set 3:Run-TryBot +1
Attention is currently required from: Damien Neil, Michael Fraenkel.
Patch set 3:-Run-TryBot
1 comment:
Patchset:
1 of 46 TryBots failed. […]
Adding new APIs requires a new text file in `go/api/next/` to declare them, otherwise the try-bots will fail.
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Damien Neil, Michael Fraenkel.
Michael Fraenkel uploaded patch set #4 to this change.
The following approvals got outdated and were removed: TryBot-Result-1 by Gopher Robot
net: context aware network Dialer.Dial functions
Add context aware dial functions for TCP, UDP, IP and Unix networks.
Fixes #49097
Updates #59897
Change-Id: I7523452e8e463a587a852e0555cec822d8dcb3dd
---
A api/next/49097.txt
M src/net/dial.go
M src/net/dial_test.go
M src/net/iprawsock.go
M src/net/tcpsock.go
M src/net/udpsock.go
M src/net/unixsock.go
7 files changed, 231 insertions(+), 27 deletions(-)
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Damien Neil.
1 comment:
Patchset:
Adding new APIs requires a new text file in `go/api/next/` to declare them, otherwise the try-bots w […]
Acknowledged
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Damien Neil, Michael Fraenkel.
Patch set 4:Run-TryBot +1
Attention is currently required from: Andy Pan, Michael Fraenkel.
3 comments:
File api/next/49097.txt:
Patch Set #4, Line 1: pkg net, func IPAddrFromAddr(netip.Addr) *IPAddr
This does not appear to be part of #49097.
Patch Set #4, Line 2: netp.Addr
typo: `s/netp.Addr/netip.Addr/`
(See test failure.)
Patch Set #4, Line 5: pkg net, method (*Dialer) DialUnix(context.Context, string, *UnixAddr, *UnixAddr) (*UnixConn, error)
These should all be suffixed with the proposal number (see test failure):
```
pkg net, method (*Dialer) DialUnix(context.Context, string, *UnixAddr, *UnixAddr) (*UnixConn, error) #49097
```
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Ian Lance Taylor, Michael Fraenkel.
Michael Fraenkel uploaded patch set #5 to this change.
The following approvals got outdated and were removed: Run-TryBot+1 by Ian Lance Taylor, TryBot-Result-1 by Gopher Robot
net: context aware network Dialer.Dial functions
Add context aware dial functions for TCP, UDP, IP and Unix networks.
Fixes #49097
Updates #59897
Change-Id: I7523452e8e463a587a852e0555cec822d8dcb3dd
---
A api/next/49097.txt
M src/net/dial.go
M src/net/dial_test.go
M src/net/iprawsock.go
M src/net/tcpsock.go
M src/net/udpsock.go
M src/net/unixsock.go
7 files changed, 230 insertions(+), 27 deletions(-)
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Damien Neil, Ian Lance Taylor.
Patch Set #4, Line 1: pkg net, func IPAddrFromAddr(netip.Addr) *IPAddr
This does not appear to be part of #49097.
I just copied the error listing the diff. I have removed it.
Patch Set #4, Line 2: netp.Addr
typo: `s/netp.Addr/netip.Addr/` […]
Acknowledged
Patch Set #4, Line 5: pkg net, method (*Dialer) DialUnix(context.Context, string, *UnixAddr, *UnixAddr) (*UnixConn, error)
These should all be suffixed with the proposal number (see test failure): […]
Acknowledged
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Ian Lance Taylor, Michael Fraenkel.
Patch Set #4, Line 1: pkg net, func IPAddrFromAddr(netip.Addr) *IPAddr
I just copied the error listing the diff. I have removed it.
Acknowledged
File src/net/iprawsock.go:
Patch Set #5, Line 31: func IPAddrFromAddr(addr netip.Addr) *IPAddr {
This function isn't part of the proposal, so it needs to be unexported: `ipAddrFromAddr`. (Or just inline it into `dialIP`, since it's used in only one place.)
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Andy Pan, Ian Lance Taylor, Michael Fraenkel.
Michael Fraenkel uploaded patch set #6 to this change.
net: context aware network Dialer.Dial functions
Add context aware dial functions for TCP, UDP, IP and Unix networks.
Fixes #49097
Updates #59897
Change-Id: I7523452e8e463a587a852e0555cec822d8dcb3dd
---
A api/next/49097.txt
M src/net/dial.go
M src/net/dial_test.go
M src/net/iprawsock.go
M src/net/tcpsock.go
M src/net/udpsock.go
M src/net/unixsock.go
7 files changed, 230 insertions(+), 27 deletions(-)
To view, visit change 490975. To unsubscribe, or for help writing mail filters, visit settings.
Hi @michael....@gmail.com, there have been some new requirements for API changes while this CL was sitting idle. If you're still interested in working on it, please check [this](https://groups.google.com/g/golang-dev/c/Ia9VoYBTRoI/m/kucsvi0iBQAJ) out and update this CL accordingly, thanks!
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
Hi @michael....@gmail.com, there have been some new requirements for API changes while this CL was sitting idle. If you're still interested in working on it, please check [this](https://groups.google.com/g/golang-dev/c/Ia9VoYBTRoI/m/kucsvi0iBQAJ) out and update this CL accordingly, thanks!
Added a relnote.
This function isn't part of the proposal, so it needs to be unexported: `ipAddrFromAddr`. (Or just inline it into `dialIP`, since it's used in only one place.)
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Commit-Queue | +1 |
et: context aware network Dialer.Dial functionss/et/net/
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
et: context aware network Dialer.Dial functionsMichael Fraenkels/et/net/
Done
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
// The network must be a UDP network name; see func Dial for details.does this really have to be an UDP network name for DialIP?
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
// The network must be a UDP network name; see func Dial for details.does this really have to be an UDP network name for DialIP?
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +1 |
Gopher RobotTryBots beginning. Status page: https://farmer.golang.org/try?commit=67f78788
Sean Liao2 of 47 TryBots failed.
Failed on js-wasm-node18: https://storage.googleapis.com/go-build-log/67f78788/js-wasm-node18_52dd567e.log
Failed on wasip1-wasm-wasmtime: https://storage.googleapis.com/go-build-log/67f78788/wasip1-wasm-wasmtime_1525d42e.logConsult https://build.golang.org/ to see whether they are new failures. Keep in mind that TryBots currently test *exactly* your git commit, without rebasing. If your commit's git parent is old, the failure might've already been fixed.
Acknowledged
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
Why is this reordered / split?
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
Michael FraenkelWhy is this reordered / split?
Not sure how it happened but it will be reverted.
Done
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +2 |
net: context aware network Dialer.Dial functions"network" seems a bit redundant here?
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
"network" seems a bit redundant here?
Acknowledged
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +1 |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
12 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
net: context aware Dialer.Dial functions
Add context aware dial functions for TCP, UDP, IP and Unix networks.
Fixes #49097
Updates #59897
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |