package net
import (
"internal/poll"
"runtime"
"syscall"
)
type rawConn struct {
fd *netFD
}
func (c *rawConn ) ok () bool { return c != nil && c .fd != nil }
func (c *rawConn ) Control (f func (uintptr )) error {
if !c .ok () {
return syscall .EINVAL
}
err := c .fd .pfd .RawControl (f )
runtime .KeepAlive (c .fd )
if err != nil {
err = &OpError {Op : "raw-control" , Net : c .fd .net , Source : nil , Addr : c .fd .laddr , Err : err }
}
return err
}
func (c *rawConn ) Read (f func (uintptr ) bool ) error {
if !c .ok () {
return syscall .EINVAL
}
err := c .fd .pfd .RawRead (f )
runtime .KeepAlive (c .fd )
if err != nil {
err = &OpError {Op : "raw-read" , Net : c .fd .net , Source : c .fd .laddr , Addr : c .fd .raddr , Err : err }
}
return err
}
func (c *rawConn ) Write (f func (uintptr ) bool ) error {
if !c .ok () {
return syscall .EINVAL
}
err := c .fd .pfd .RawWrite (f )
runtime .KeepAlive (c .fd )
if err != nil {
err = &OpError {Op : "raw-write" , Net : c .fd .net , Source : c .fd .laddr , Addr : c .fd .raddr , Err : err }
}
return err
}
func (c *rawConn ) PollFD () *poll .FD {
if !c .ok () {
return nil
}
return &c .fd .pfd
}
func newRawConn (fd *netFD ) (*rawConn , error ) {
return &rawConn {fd : fd }, nil
}
type rawListener struct {
rawConn
}
func (l *rawListener ) Read (func (uintptr ) bool ) error {
return syscall .EINVAL
}
func (l *rawListener ) Write (func (uintptr ) bool ) error {
return syscall .EINVAL
}
func newRawListener (fd *netFD ) (*rawListener , error ) {
return &rawListener {rawConn {fd : fd }}, nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .