vendor/golang.org/x/sys/unix/sockcmsg_unix.go
changeset 265 05c40b36d3b2
parent 256 6d9efbef00a9
--- 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)) {