Skip to content

Commit 97ae181

Browse files
matttbegopherbot
authored andcommitted
net: check for MPTCP in DialTCP and ListenTCP
Setting GODEBUG=multipathtcp= [1] has no effects on apps using ListenTCP or DialTCP directly. According to the documentation, these functions are supposed to act like Listen and Dial respectively: ListenTCP acts like Listen for TCP networks. DialTCP acts like Dial for TCP networks. So when reading this, I think we should expect GODEBUG=multipathtcp= to act on these functions as well. Also, since #69016, MPTCP is used by default (if supported) with TCP listeners. Similarly, when ListenTCP is used directly, MPTCP is unexpectedly not used. It is strange to have a different behaviour. So now, ListenTCP and DialTCP also check for MPTCP. Those are the exact same checks that are done in dial.go, see Listen and dialSingle. [1] https://pkg.go.dev/net#Dialer.SetMultipathTCP Fixes #70500 Change-Id: I646431a74571668e505493fa8c1b2206bf30ed09 GitHub-Last-Rev: 69a31a1 GitHub-Pull-Request: #70501 Reviewed-on: https://go-review.googlesource.com/c/go/+/630715 Reviewed-by: Ian Lance Taylor <[email protected]> Auto-Submit: Ian Lance Taylor <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent f697114 commit 97ae181

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/net/tcpsock.go

+18-2
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,15 @@ func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) {
324324
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: nil, Err: errMissingAddress}
325325
}
326326
sd := &sysDialer{network: network, address: raddr.String()}
327-
c, err := sd.dialTCP(context.Background(), laddr, raddr)
327+
var (
328+
c *TCPConn
329+
err error
330+
)
331+
if sd.MultipathTCP() {
332+
c, err = sd.dialMPTCP(context.Background(), laddr, raddr)
333+
} else {
334+
c, err = sd.dialTCP(context.Background(), laddr, raddr)
335+
}
328336
if err != nil {
329337
return nil, &OpError{Op: "dial", Net: network, Source: laddr.opAddr(), Addr: raddr.opAddr(), Err: err}
330338
}
@@ -439,7 +447,15 @@ func ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error) {
439447
laddr = &TCPAddr{}
440448
}
441449
sl := &sysListener{network: network, address: laddr.String()}
442-
ln, err := sl.listenTCP(context.Background(), laddr)
450+
var (
451+
ln *TCPListener
452+
err error
453+
)
454+
if sl.MultipathTCP() {
455+
ln, err = sl.listenMPTCP(context.Background(), laddr)
456+
} else {
457+
ln, err = sl.listenTCP(context.Background(), laddr)
458+
}
443459
if err != nil {
444460
return nil, &OpError{Op: "listen", Net: network, Source: nil, Addr: laddr.opAddr(), Err: err}
445461
}

0 commit comments

Comments
 (0)