// Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build linux netbsd package socket import "net" type mmsghdrs []mmsghdr func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error { for i := range hs { vs := make([]iovec, len(ms[i].Buffers)) var sa []byte if parseFn != nil { sa = make([]byte, sizeofSockaddrInet6) } if marshalFn != nil { sa = marshalFn(ms[i].Addr) } hs[i].Hdr.pack(vs, ms[i].Buffers, ms[i].OOB, sa) } return nil } func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { for i := range hs { ms[i].N = int(hs[i].Len) ms[i].NN = hs[i].Hdr.controllen() ms[i].Flags = hs[i].Hdr.flags() if parseFn != nil { var err error ms[i].Addr, err = parseFn(hs[i].Hdr.name(), hint) if err != nil { return err } } } return nil }