Skip to content

Commit ff8c426

Browse files
hawkinswgopherbot
authored andcommitted
unix: add support for TCP_CONNECTION_INFO on macOS
x/sys provides support for accessing TCP_INFO on Linux but does not provide support for accessing the equivalent (TCP_CONNECTION_INFO) on macOS. This patch adds that functionality. Fixes golang/go#53330 Change-Id: Ia1c1bf79a8bbb76f3ccfe58c61e1a82e08735152 Reviewed-on: https://go-review.googlesource.com/c/sys/+/411734 Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Ian Lance Taylor <iant@golang.org>
1 parent bf31f56 commit ff8c426

File tree

4 files changed

+133
-69
lines changed

4 files changed

+133
-69
lines changed

unix/syscall_darwin.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,13 @@ func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
393393
return x, err
394394
}
395395

396+
func GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) {
397+
var value TCPConnectionInfo
398+
vallen := _Socklen(SizeofTCPConnectionInfo)
399+
err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
400+
return &value, err
401+
}
402+
396403
func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {
397404
mib, err := sysctlmib(name, args...)
398405
if err != nil {

unix/types_darwin.go

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -200,30 +200,33 @@ type IPv6MTUInfo C.struct_ip6_mtuinfo
200200

201201
type ICMPv6Filter C.struct_icmp6_filter
202202

203+
type TCPConnectionInfo C.struct_tcp_connection_info
204+
203205
const (
204-
SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
205-
SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
206-
SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
207-
SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
208-
SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl
209-
SizeofSockaddrCtl = C.sizeof_struct_sockaddr_ctl
210-
SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
211-
SizeofXvsockpcb = C.sizeof_struct_xvsockpcb
212-
SizeofXSocket = C.sizeof_struct_xsocket
213-
SizeofXSockbuf = C.sizeof_struct_xsockbuf
214-
SizeofXVSockPgen = C.sizeof_struct_xvsockpgen
215-
SizeofXucred = C.sizeof_struct_xucred
216-
SizeofLinger = C.sizeof_struct_linger
217-
SizeofIovec = C.sizeof_struct_iovec
218-
SizeofIPMreq = C.sizeof_struct_ip_mreq
219-
SizeofIPMreqn = C.sizeof_struct_ip_mreqn
220-
SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
221-
SizeofMsghdr = C.sizeof_struct_msghdr
222-
SizeofCmsghdr = C.sizeof_struct_cmsghdr
223-
SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
224-
SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
225-
SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
226-
SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
206+
SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
207+
SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
208+
SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
209+
SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
210+
SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl
211+
SizeofSockaddrCtl = C.sizeof_struct_sockaddr_ctl
212+
SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
213+
SizeofXvsockpcb = C.sizeof_struct_xvsockpcb
214+
SizeofXSocket = C.sizeof_struct_xsocket
215+
SizeofXSockbuf = C.sizeof_struct_xsockbuf
216+
SizeofXVSockPgen = C.sizeof_struct_xvsockpgen
217+
SizeofXucred = C.sizeof_struct_xucred
218+
SizeofLinger = C.sizeof_struct_linger
219+
SizeofIovec = C.sizeof_struct_iovec
220+
SizeofIPMreq = C.sizeof_struct_ip_mreq
221+
SizeofIPMreqn = C.sizeof_struct_ip_mreqn
222+
SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
223+
SizeofMsghdr = C.sizeof_struct_msghdr
224+
SizeofCmsghdr = C.sizeof_struct_cmsghdr
225+
SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
226+
SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
227+
SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
228+
SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
229+
SizeofTCPConnectionInfo = C.sizeof_struct_tcp_connection_info
227230
)
228231

229232
// Ptrace requests

unix/ztypes_darwin_amd64.go

Lines changed: 50 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/ztypes_darwin_arm64.go

Lines changed: 50 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)