aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2021-11-03 16:28:47 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2021-11-04 21:52:36 +0000
commit8ad0a7e7853ffea6140e942ea5f553061d3423c2 (patch)
treeee5671cd08b1bdf9b8dbe860f12f1ce38ce42a8f /src/internal
parent37634eeff9b7510d2eb224397c2bc8c806da83e1 (diff)
downloadgo-8ad0a7e7853ffea6140e942ea5f553061d3423c2.tar.gz
go-8ad0a7e7853ffea6140e942ea5f553061d3423c2.zip
net: pass around pointers to SockaddrInetN
...instead of the structs themselves. Escape analysis can handle this, and it'll avoid a bunch of large struct copies. Change-Id: Ia9c6064ed32a4c26d5a96dae2ed7d7ece6d38704 Reviewed-on: https://go-review.googlesource.com/c/go/+/361264 Trust: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/poll/fd_unix.go8
-rw-r--r--src/internal/poll/fd_windows.go30
-rw-r--r--src/internal/syscall/unix/net.go8
-rw-r--r--src/internal/syscall/unix/net_js.go8
-rw-r--r--src/internal/syscall/windows/net_windows.go4
5 files changed, 26 insertions, 32 deletions
diff --git a/src/internal/poll/fd_unix.go b/src/internal/poll/fd_unix.go
index 45d4ce07b2..85971a16cd 100644
--- a/src/internal/poll/fd_unix.go
+++ b/src/internal/poll/fd_unix.go
@@ -436,7 +436,7 @@ func (fd *FD) Pwrite(p []byte, off int64) (int, error) {
}
// WriteToInet4 wraps the sendto network call for IPv4 addresses.
-func (fd *FD) WriteToInet4(p []byte, sa syscall.SockaddrInet4) (int, error) {
+func (fd *FD) WriteToInet4(p []byte, sa *syscall.SockaddrInet4) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
@@ -462,7 +462,7 @@ func (fd *FD) WriteToInet4(p []byte, sa syscall.SockaddrInet4) (int, error) {
}
// WriteToInet6 wraps the sendto network call for IPv6 addresses.
-func (fd *FD) WriteToInet6(p []byte, sa syscall.SockaddrInet6) (int, error) {
+func (fd *FD) WriteToInet6(p []byte, sa *syscall.SockaddrInet6) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
@@ -540,7 +540,7 @@ func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, err
}
// WriteMsgInet4 is WriteMsg specialized for syscall.SockaddrInet4.
-func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa syscall.SockaddrInet4) (int, int, error) {
+func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa *syscall.SockaddrInet4) (int, int, error) {
if err := fd.writeLock(); err != nil {
return 0, 0, err
}
@@ -566,7 +566,7 @@ func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa syscall.SockaddrInet4) (int
}
// WriteMsgInet6 is WriteMsg specialized for syscall.SockaddrInet6.
-func (fd *FD) WriteMsgInet6(p []byte, oob []byte, sa syscall.SockaddrInet6) (int, int, error) {
+func (fd *FD) WriteMsgInet6(p []byte, oob []byte, sa *syscall.SockaddrInet6) (int, int, error) {
if err := fd.writeLock(); err != nil {
return 0, 0, err
}
diff --git a/src/internal/poll/fd_windows.go b/src/internal/poll/fd_windows.go
index 4dd5986efd..94cdfca601 100644
--- a/src/internal/poll/fd_windows.go
+++ b/src/internal/poll/fd_windows.go
@@ -79,8 +79,6 @@ type operation struct {
buf syscall.WSABuf
msg windows.WSAMsg
sa syscall.Sockaddr
- sa4 syscall.SockaddrInet4
- sa6 syscall.SockaddrInet6
rsa *syscall.RawSockaddrAny
rsan int32
handle syscall.Handle
@@ -852,7 +850,7 @@ func (fd *FD) WriteTo(buf []byte, sa syscall.Sockaddr) (int, error) {
}
// WriteToInet4 is WriteTo, specialized for syscall.SockaddrInet4.
-func (fd *FD) WriteToInet4(buf []byte, sa4 syscall.SockaddrInet4) (int, error) {
+func (fd *FD) WriteToInet4(buf []byte, sa4 *syscall.SockaddrInet4) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
@@ -862,9 +860,8 @@ func (fd *FD) WriteToInet4(buf []byte, sa4 syscall.SockaddrInet4) (int, error) {
// handle zero-byte payload
o := &fd.wop
o.InitBuf(buf)
- o.sa4 = sa4
n, err := execIO(o, func(o *operation) error {
- return windows.WSASendtoInet4(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, o.sa4, &o.o, nil)
+ return windows.WSASendtoInet4(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, sa4, &o.o, nil)
})
return n, err
}
@@ -877,9 +874,8 @@ func (fd *FD) WriteToInet4(buf []byte, sa4 syscall.SockaddrInet4) (int, error) {
}
o := &fd.wop
o.InitBuf(b)
- o.sa4 = sa4
n, err := execIO(o, func(o *operation) error {
- return windows.WSASendtoInet4(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, o.sa4, &o.o, nil)
+ return windows.WSASendtoInet4(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, sa4, &o.o, nil)
})
ntotal += int(n)
if err != nil {
@@ -891,7 +887,7 @@ func (fd *FD) WriteToInet4(buf []byte, sa4 syscall.SockaddrInet4) (int, error) {
}
// WriteToInet6 is WriteTo, specialized for syscall.SockaddrInet6.
-func (fd *FD) WriteToInet6(buf []byte, sa6 syscall.SockaddrInet6) (int, error) {
+func (fd *FD) WriteToInet6(buf []byte, sa6 *syscall.SockaddrInet6) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
@@ -901,9 +897,8 @@ func (fd *FD) WriteToInet6(buf []byte, sa6 syscall.SockaddrInet6) (int, error) {
// handle zero-byte payload
o := &fd.wop
o.InitBuf(buf)
- o.sa6 = sa6
n, err := execIO(o, func(o *operation) error {
- return windows.WSASendtoInet6(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, o.sa6, &o.o, nil)
+ return windows.WSASendtoInet6(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, sa6, &o.o, nil)
})
return n, err
}
@@ -916,9 +911,8 @@ func (fd *FD) WriteToInet6(buf []byte, sa6 syscall.SockaddrInet6) (int, error) {
}
o := &fd.wop
o.InitBuf(b)
- o.sa6 = sa6
n, err := execIO(o, func(o *operation) error {
- return windows.WSASendtoInet6(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, o.sa6, &o.o, nil)
+ return windows.WSASendtoInet6(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, sa6, &o.o, nil)
})
ntotal += int(n)
if err != nil {
@@ -1122,7 +1116,7 @@ func (fd *FD) RawWrite(f func(uintptr) bool) error {
return syscall.EWINDOWS
}
-func sockaddrInet4ToRaw(sa syscall.SockaddrInet4) (unsafe.Pointer, int32) {
+func sockaddrInet4ToRaw(sa *syscall.SockaddrInet4) (unsafe.Pointer, int32) {
var raw syscall.RawSockaddrInet4
raw.Family = syscall.AF_INET
p := (*[2]byte)(unsafe.Pointer(&raw.Port))
@@ -1132,7 +1126,7 @@ func sockaddrInet4ToRaw(sa syscall.SockaddrInet4) (unsafe.Pointer, int32) {
return unsafe.Pointer(&raw), int32(unsafe.Sizeof(raw))
}
-func sockaddrInet6ToRaw(sa syscall.SockaddrInet6) (unsafe.Pointer, int32) {
+func sockaddrInet6ToRaw(sa *syscall.SockaddrInet6) (unsafe.Pointer, int32) {
var raw syscall.RawSockaddrInet6
raw.Family = syscall.AF_INET6
p := (*[2]byte)(unsafe.Pointer(&raw.Port))
@@ -1161,10 +1155,10 @@ func rawToSockaddrInet6(rsa *syscall.RawSockaddrAny, sa *syscall.SockaddrInet6)
func sockaddrToRaw(sa syscall.Sockaddr) (unsafe.Pointer, int32, error) {
switch sa := sa.(type) {
case *syscall.SockaddrInet4:
- ptr, sz := sockaddrInet4ToRaw(*sa)
+ ptr, sz := sockaddrInet4ToRaw(sa)
return ptr, sz, nil
case *syscall.SockaddrInet6:
- ptr, sz := sockaddrInet6ToRaw(*sa)
+ ptr, sz := sockaddrInet6ToRaw(sa)
return ptr, sz, nil
default:
return nil, 0, syscall.EWINDOWS
@@ -1281,7 +1275,7 @@ func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, err
}
// WriteMsgInet4 is WriteMsg specialized for syscall.SockaddrInet4.
-func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa syscall.SockaddrInet4) (int, int, error) {
+func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa *syscall.SockaddrInet4) (int, int, error) {
if len(p) > maxRW {
return 0, 0, errors.New("packet is too large (only 1GB is allowed)")
}
@@ -1303,7 +1297,7 @@ func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa syscall.SockaddrInet4) (int
}
// WriteMsgInet6 is WriteMsg specialized for syscall.SockaddrInet6.
-func (fd *FD) WriteMsgInet6(p []byte, oob []byte, sa syscall.SockaddrInet6) (int, int, error) {
+func (fd *FD) WriteMsgInet6(p []byte, oob []byte, sa *syscall.SockaddrInet6) (int, int, error) {
if len(p) > maxRW {
return 0, 0, errors.New("packet is too large (only 1GB is allowed)")
}
diff --git a/src/internal/syscall/unix/net.go b/src/internal/syscall/unix/net.go
index 87ce89b57f..85632e1c03 100644
--- a/src/internal/syscall/unix/net.go
+++ b/src/internal/syscall/unix/net.go
@@ -21,19 +21,19 @@ func RecvfromInet6(fd int, p []byte, flags int, from *syscall.SockaddrInet6) (n
//go:linkname SendtoInet4 syscall.sendtoInet4
//go:noescape
-func SendtoInet4(fd int, p []byte, flags int, to syscall.SockaddrInet4) (err error)
+func SendtoInet4(fd int, p []byte, flags int, to *syscall.SockaddrInet4) (err error)
//go:linkname SendtoInet6 syscall.sendtoInet6
//go:noescape
-func SendtoInet6(fd int, p []byte, flags int, to syscall.SockaddrInet6) (err error)
+func SendtoInet6(fd int, p []byte, flags int, to *syscall.SockaddrInet6) (err error)
//go:linkname SendmsgNInet4 syscall.sendmsgNInet4
//go:noescape
-func SendmsgNInet4(fd int, p, oob []byte, to syscall.SockaddrInet4, flags int) (n int, err error)
+func SendmsgNInet4(fd int, p, oob []byte, to *syscall.SockaddrInet4, flags int) (n int, err error)
//go:linkname SendmsgNInet6 syscall.sendmsgNInet6
//go:noescape
-func SendmsgNInet6(fd int, p, oob []byte, to syscall.SockaddrInet6, flags int) (n int, err error)
+func SendmsgNInet6(fd int, p, oob []byte, to *syscall.SockaddrInet6, flags int) (n int, err error)
//go:linkname RecvmsgInet4 syscall.recvmsgInet4
//go:noescape
diff --git a/src/internal/syscall/unix/net_js.go b/src/internal/syscall/unix/net_js.go
index defc3f6fb2..622fc8eb14 100644
--- a/src/internal/syscall/unix/net_js.go
+++ b/src/internal/syscall/unix/net_js.go
@@ -19,19 +19,19 @@ func RecvfromInet6(fd int, p []byte, flags int, from *syscall.SockaddrInet6) (n
return 0, syscall.ENOSYS
}
-func SendtoInet4(fd int, p []byte, flags int, to syscall.SockaddrInet4) (err error) {
+func SendtoInet4(fd int, p []byte, flags int, to *syscall.SockaddrInet4) (err error) {
return syscall.ENOSYS
}
-func SendtoInet6(fd int, p []byte, flags int, to syscall.SockaddrInet6) (err error) {
+func SendtoInet6(fd int, p []byte, flags int, to *syscall.SockaddrInet6) (err error) {
return syscall.ENOSYS
}
-func SendmsgNInet4(fd int, p, oob []byte, to syscall.SockaddrInet4, flags int) (n int, err error) {
+func SendmsgNInet4(fd int, p, oob []byte, to *syscall.SockaddrInet4, flags int) (n int, err error) {
return 0, syscall.ENOSYS
}
-func SendmsgNInet6(fd int, p, oob []byte, to syscall.SockaddrInet6, flags int) (n int, err error) {
+func SendmsgNInet6(fd int, p, oob []byte, to *syscall.SockaddrInet6, flags int) (n int, err error) {
return 0, syscall.ENOSYS
}
diff --git a/src/internal/syscall/windows/net_windows.go b/src/internal/syscall/windows/net_windows.go
index 1fccd55e4b..3d3df7161c 100644
--- a/src/internal/syscall/windows/net_windows.go
+++ b/src/internal/syscall/windows/net_windows.go
@@ -11,8 +11,8 @@ import (
//go:linkname WSASendtoInet4 syscall.wsaSendtoInet4
//go:noescape
-func WSASendtoInet4(s syscall.Handle, bufs *syscall.WSABuf, bufcnt uint32, sent *uint32, flags uint32, to syscall.SockaddrInet4, overlapped *syscall.Overlapped, croutine *byte) (err error)
+func WSASendtoInet4(s syscall.Handle, bufs *syscall.WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *syscall.SockaddrInet4, overlapped *syscall.Overlapped, croutine *byte) (err error)
//go:linkname WSASendtoInet6 syscall.wsaSendtoInet6
//go:noescape
-func WSASendtoInet6(s syscall.Handle, bufs *syscall.WSABuf, bufcnt uint32, sent *uint32, flags uint32, to syscall.SockaddrInet6, overlapped *syscall.Overlapped, croutine *byte) (err error)
+func WSASendtoInet6(s syscall.Handle, bufs *syscall.WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *syscall.SockaddrInet6, overlapped *syscall.Overlapped, croutine *byte) (err error)