diff -r 8f478162d991 -r 05c40b36d3b2 vendor/golang.org/x/sys/unix/sockcmsg_unix.go --- a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go Thu Sep 22 16:37:07 2022 +0200 +++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go Sat Feb 04 12:58:35 2023 +0100 @@ -52,6 +52,20 @@ return msgs, nil } +// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header, +// message data (a slice of b), and the remainder of b after that single message. +// When there are no remaining messages, len(remainder) == 0. +func ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) { + h, dbuf, err := socketControlMessageHeaderAndData(b) + if err != nil { + return Cmsghdr{}, nil, nil, err + } + if i := cmsgAlignOf(int(h.Len)); i < len(b) { + remainder = b[i:] + } + return *h, dbuf, remainder, nil +} + func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) { h := (*Cmsghdr)(unsafe.Pointer(&b[0])) if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {