...
1
2
3
4
5
6
7 package socket
8
9 import (
10 "net"
11 "os"
12 )
13
14 func (c *Conn) recvMsg(m *Message, flags int) error {
15 m.raceWrite()
16 var (
17 operr error
18 n int
19 oobn int
20 recvflags int
21 from net.Addr
22 )
23 fn := func(s uintptr) bool {
24 n, oobn, recvflags, from, operr = recvmsg(s, m.Buffers, m.OOB, flags, c.network)
25 return ioComplete(flags, operr)
26 }
27 if err := c.c.Read(fn); err != nil {
28 return err
29 }
30 if operr != nil {
31 return os.NewSyscallError("recvmsg", operr)
32 }
33 m.Addr = from
34 m.N = n
35 m.NN = oobn
36 m.Flags = recvflags
37 return nil
38 }
39
40 func (c *Conn) sendMsg(m *Message, flags int) error {
41 m.raceRead()
42 var (
43 operr error
44 n int
45 )
46 fn := func(s uintptr) bool {
47 n, operr = sendmsg(s, m.Buffers, m.OOB, m.Addr, flags)
48 return ioComplete(flags, operr)
49 }
50 if err := c.c.Write(fn); err != nil {
51 return err
52 }
53 if operr != nil {
54 return os.NewSyscallError("sendmsg", operr)
55 }
56 m.N = n
57 m.NN = len(m.OOB)
58 return nil
59 }
60
View as plain text