1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
6 // +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
15 func (c *Conn) recvMsg(m *Message, flags int) error {
17 vs := make([]iovec, len(m.Buffers))
19 if c.network != "tcp" {
20 sa = make([]byte, sizeofSockaddrInet6)
22 h.pack(vs, m.Buffers, m.OOB, sa)
25 fn := func(s uintptr) bool {
26 n, operr = recvmsg(s, &h, flags)
27 if operr == syscall.EAGAIN {
32 if err := c.c.Read(fn); err != nil {
36 return os.NewSyscallError("recvmsg", operr)
38 if c.network != "tcp" {
40 m.Addr, err = parseInetAddr(sa[:], c.network)
51 func (c *Conn) sendMsg(m *Message, flags int) error {
53 vs := make([]iovec, len(m.Buffers))
56 sa = marshalInetAddr(m.Addr)
58 h.pack(vs, m.Buffers, m.OOB, sa)
61 fn := func(s uintptr) bool {
62 n, operr = sendmsg(s, &h, flags)
63 if operr == syscall.EAGAIN {
68 if err := c.c.Write(fn); err != nil {
72 return os.NewSyscallError("sendmsg", operr)