...
Source file
src/net/rawconn.go
Documentation: net
1
2
3
4
5 package net
6
7 import (
8 "runtime"
9 "syscall"
10 )
11
12
13
14
15
16
17
18 type rawConn struct {
19 fd *netFD
20 }
21
22 func (c *rawConn) ok() bool { return c != nil && c.fd != nil }
23
24 func (c *rawConn) Control(f func(uintptr)) error {
25 if !c.ok() {
26 return syscall.EINVAL
27 }
28 err := c.fd.pfd.RawControl(f)
29 runtime.KeepAlive(c.fd)
30 if err != nil {
31 err = &OpError{Op: "raw-control", Net: c.fd.net, Source: nil, Addr: c.fd.laddr, Err: err}
32 }
33 return err
34 }
35
36 func (c *rawConn) Read(f func(uintptr) bool) error {
37 if !c.ok() {
38 return syscall.EINVAL
39 }
40 err := c.fd.pfd.RawRead(f)
41 runtime.KeepAlive(c.fd)
42 if err != nil {
43 err = &OpError{Op: "raw-read", Net: c.fd.net, Source: c.fd.laddr, Addr: c.fd.raddr, Err: err}
44 }
45 return err
46 }
47
48 func (c *rawConn) Write(f func(uintptr) bool) error {
49 if !c.ok() {
50 return syscall.EINVAL
51 }
52 err := c.fd.pfd.RawWrite(f)
53 runtime.KeepAlive(c.fd)
54 if err != nil {
55 err = &OpError{Op: "raw-write", Net: c.fd.net, Source: c.fd.laddr, Addr: c.fd.raddr, Err: err}
56 }
57 return err
58 }
59
60 func newRawConn(fd *netFD) (*rawConn, error) {
61 return &rawConn{fd: fd}, nil
62 }
63
64 type rawListener struct {
65 rawConn
66 }
67
68 func (l *rawListener) Read(func(uintptr) bool) error {
69 return syscall.EINVAL
70 }
71
72 func (l *rawListener) Write(func(uintptr) bool) error {
73 return syscall.EINVAL
74 }
75
76 func newRawListener(fd *netFD) (*rawListener, error) {
77 return &rawListener{rawConn{fd: fd}}, nil
78 }
79
View as plain text