package tcp
import (
"net"
"syscall"
"github.com/mikioh/tcpopt"
)
var _ net .Conn = &Conn {}
func (c *Conn ) SetOption (o tcpopt .Option ) error {
if !c .ok () {
return syscall .EINVAL
}
b , err := o .Marshal ()
if err != nil {
return &net .OpError {Op : "raw-control" , Net : c .LocalAddr ().Network (), Source : nil , Addr : c .LocalAddr (), Err : err }
}
if err := c .setOption (o .Level (), o .Name (), b ); err != nil {
return &net .OpError {Op : "raw-control" , Net : c .LocalAddr ().Network (), Source : nil , Addr : c .LocalAddr (), Err : err }
}
return nil
}
func (c *Conn ) Option (level , name int , b []byte ) (tcpopt .Option , error ) {
if !c .ok () || len (b ) == 0 {
return nil , syscall .EINVAL
}
n , err := c .option (level , name , b )
if err != nil {
return nil , &net .OpError {Op : "raw-control" , Net : c .LocalAddr ().Network (), Source : nil , Addr : c .LocalAddr (), Err : err }
}
o , err := tcpopt .Parse (level , name , b [:n ])
if err != nil {
return nil , &net .OpError {Op : "raw-control" , Net : c .LocalAddr ().Network (), Source : nil , Addr : c .LocalAddr (), Err : err }
}
return o , nil
}
func (c *Conn ) Buffered () int {
if !c .ok () {
return -1
}
return c .buffered ()
}
func (c *Conn ) Available () int {
if !c .ok () {
return -1
}
return c .available ()
}
func (c *Conn ) OriginalDst () (net .Addr , error ) {
if !c .ok () {
return nil , syscall .EINVAL
}
la := c .LocalAddr ().(*net .TCPAddr )
od , err := c .originalDst (la , c .RemoteAddr ().(*net .TCPAddr ))
if err != nil {
return nil , &net .OpError {Op : "raw-control" , Net : c .LocalAddr ().Network (), Source : nil , Addr : la , Err : err }
}
return od , nil
}
The pages are generated with Golds v0.8.2 . (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 @zigo_101 (reachable from the left QR code) to get the latest news of Golds .