| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | 
							- //go:build linux && (amd64 || arm64 || ppc64 || ppc64le || mips64 || mips64le || s390x || riscv64) && !android && !e2e_testing
 
- // +build linux
 
- // +build amd64 arm64 ppc64 ppc64le mips64 mips64le s390x riscv64
 
- // +build !android
 
- // +build !e2e_testing
 
- package udp
 
- import (
 
- 	"golang.org/x/sys/unix"
 
- )
 
- type iovec struct {
 
- 	Base *byte
 
- 	Len  uint64
 
- }
 
- type msghdr struct {
 
- 	Name       *byte
 
- 	Namelen    uint32
 
- 	Pad0       [4]byte
 
- 	Iov        *iovec
 
- 	Iovlen     uint64
 
- 	Control    *byte
 
- 	Controllen uint64
 
- 	Flags      int32
 
- 	Pad1       [4]byte
 
- }
 
- type rawMessage struct {
 
- 	Hdr  msghdr
 
- 	Len  uint32
 
- 	Pad0 [4]byte
 
- }
 
- func (u *Conn) PrepareRawMessages(n int) ([]rawMessage, [][]byte, [][]byte) {
 
- 	msgs := make([]rawMessage, n)
 
- 	buffers := make([][]byte, n)
 
- 	names := make([][]byte, n)
 
- 	for i := range msgs {
 
- 		buffers[i] = make([]byte, MTU)
 
- 		names[i] = make([]byte, unix.SizeofSockaddrInet6)
 
- 		//TODO: this is still silly, no need for an array
 
- 		vs := []iovec{
 
- 			{Base: &buffers[i][0], Len: uint64(len(buffers[i]))},
 
- 		}
 
- 		msgs[i].Hdr.Iov = &vs[0]
 
- 		msgs[i].Hdr.Iovlen = uint64(len(vs))
 
- 		msgs[i].Hdr.Name = &names[i][0]
 
- 		msgs[i].Hdr.Namelen = uint32(len(names[i]))
 
- 	}
 
- 	return msgs, buffers, names
 
- }
 
 
  |