package net
import (
"net"
"time"
)
type PacketListener interface {
Accept () (net .PacketConn , net .Addr , error )
Close () error
Addr () net .Addr
}
func PacketListenerFromListener (l net .Listener ) PacketListener {
return &packetListenerWrapper {
l : l ,
}
}
type packetListenerWrapper struct {
l net .Listener
}
func (p *packetListenerWrapper ) Accept () (net .PacketConn , net .Addr , error ) {
c , err := p .l .Accept ()
if err != nil {
return PacketConnFromConn (c ), nil , err
}
return PacketConnFromConn (c ), c .RemoteAddr (), nil
}
func (p *packetListenerWrapper ) Close () error {
return p .l .Close ()
}
func (p *packetListenerWrapper ) Addr () net .Addr {
return p .l .Addr ()
}
func PacketConnFromConn (conn net .Conn ) net .PacketConn {
return &packetConnWrapper {conn }
}
type packetConnWrapper struct {
conn net .Conn
}
func (p *packetConnWrapper ) ReadFrom (b []byte ) (int , net .Addr , error ) {
n , err := p .conn .Read (b )
return n , p .conn .RemoteAddr (), err
}
func (p *packetConnWrapper ) WriteTo (b []byte , _ net .Addr ) (int , error ) {
n , err := p .conn .Write (b )
return n , err
}
func (p *packetConnWrapper ) Close () error {
return p .conn .Close ()
}
func (p *packetConnWrapper ) LocalAddr () net .Addr {
return p .conn .LocalAddr ()
}
func (p *packetConnWrapper ) SetDeadline (t time .Time ) error {
return p .conn .SetDeadline (t )
}
func (p *packetConnWrapper ) SetReadDeadline (t time .Time ) error {
return p .conn .SetReadDeadline (t )
}
func (p *packetConnWrapper ) SetWriteDeadline (t time .Time ) error {
return p .conn .SetWriteDeadline (t )
}
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 .