From: anon5 Date: Sat, 20 Feb 2021 16:31:06 +0000 (+0000) Subject: rudp: deprecate ErrClosed and replace with net.ErrClosed X-Git-Tag: v0.0.1~37 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=8b61ee961a9191fd2731a48d46f33b561a316032;p=mt.git rudp: deprecate ErrClosed and replace with net.ErrClosed --- diff --git a/go.mod b/go.mod index d31d7f9..1ea9adc 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ module github.com/anon55555/mt -go 1.15 +go 1.16 diff --git a/rudp/listen.go b/rudp/listen.go index 871a591..2eda819 100644 --- a/rudp/listen.go +++ b/rudp/listen.go @@ -52,7 +52,7 @@ func Listen(conn net.PacketConn) *Listener { } // Accept waits for and returns a connecting Peer. -// You should keep calling this until it returns ErrClosed +// You should keep calling this until it returns net.ErrClosed // so it doesn't leak a goroutine. func (l *Listener) Accept() (*Peer, error) { select { @@ -62,7 +62,7 @@ func (l *Listener) Accept() (*Peer, error) { case err := <-l.errs: return nil, err default: - return nil, ErrClosed + return nil, net.ErrClosed } } close(clt.accepted) diff --git a/rudp/net.go b/rudp/net.go index 421a3e7..e2e7289 100644 --- a/rudp/net.go +++ b/rudp/net.go @@ -3,11 +3,10 @@ package rudp import ( "errors" "net" - "strings" ) -// TODO: Use net.ErrClosed when Go 1.16 is released. -var ErrClosed = errors.New("use of closed peer") +// ErrClosed is deprecated, use net.ErrClosed instead. +var ErrClosed = net.ErrClosed /* netPkt.Data format (big endian): @@ -27,9 +26,7 @@ func readNetPkts(conn net.PacketConn, pkts chan<- netPkt, errs chan<- error) { buf := make([]byte, MaxNetPktSize) n, addr, err := conn.ReadFrom(buf) if err != nil { - // TODO: Change to this when Go 1.16 is released: - // if errors.Is(err, net.ErrClosed) { - if strings.Contains(err.Error(), "use of closed network connection") { + if errors.Is(err, net.ErrClosed) { break } diff --git a/rudp/peer.go b/rudp/peer.go index feb0ff9..9dca93d 100644 --- a/rudp/peer.go +++ b/rudp/peer.go @@ -82,7 +82,7 @@ func (p *Peer) TimedOut() bool { } // Recv recieves a packet from the Peer. -// You should keep calling this until it returns ErrClosed +// You should keep calling this until it returns net.ErrClosed // so it doesn't leak a goroutine. func (p *Peer) Recv() (Pkt, error) { select { @@ -92,7 +92,7 @@ func (p *Peer) Recv() (Pkt, error) { case err := <-p.errs: return Pkt{}, err default: - return Pkt{}, ErrClosed + return Pkt{}, net.ErrClosed } } return pkt, nil @@ -108,7 +108,7 @@ func (p *Peer) Close() error { select { case <-p.Disco(): - return ErrClosed + return net.ErrClosed default: } diff --git a/rudp/process.go b/rudp/process.go index c36af81..70c04a2 100644 --- a/rudp/process.go +++ b/rudp/process.go @@ -2,7 +2,6 @@ package rudp import ( "encoding/binary" - "encoding/hex" "errors" "fmt" "io" @@ -16,9 +15,7 @@ type PktError struct { } func (e PktError) Error() string { - return "error processing " + e.Type + " pkt: " + - hex.EncodeToString(e.Data) + ": " + - e.Err.Error() + return fmt.Sprintf("error processing %s pkt: %x: %v", e.Type, e.Data, e.Err) } func (e PktError) Unwrap() error { return e.Err } @@ -38,7 +35,7 @@ func (p *Peer) processNetPkts(pkts <-chan netPkt) { type TrailingDataError []byte func (e TrailingDataError) Error() string { - return "trailing data: " + hex.EncodeToString([]byte(e)) + return fmt.Sprintf("trailing data: %x", []byte(e)) } func (p *Peer) processNetPkt(pkt netPkt) (err error) { diff --git a/rudp/proxy/proxy.go b/rudp/proxy/proxy.go index 6fc14ec..833260b 100644 --- a/rudp/proxy/proxy.go +++ b/rudp/proxy/proxy.go @@ -15,7 +15,7 @@ import ( "net" "os" - "github.com/anon55555/mt/rudp" + "mt/rudp" ) func main() { @@ -61,7 +61,7 @@ func proxy(src, dest *rudp.Peer) { for { pkt, err := src.Recv() if err != nil { - if err == rudp.ErrClosed { + if err == net.ErrClosed { msg := src.Addr().String() + " disconnected" if src.TimedOut() { msg += " (timed out)" diff --git a/rudp/send.go b/rudp/send.go index 3cfcda4..2615c59 100644 --- a/rudp/send.go +++ b/rudp/send.go @@ -126,7 +126,7 @@ func (p *Peer) sendRaw(pkt rawPkt) (ack <-chan struct{}, err error) { select { case <-p.Disco(): - return nil, ErrClosed + return nil, net.ErrClosed default: } @@ -201,12 +201,9 @@ func (p *Peer) sendRel(pkt rawPkt) (ack <-chan struct{}, err error) { } go func() { - resend := time.NewTicker(500 * time.Millisecond) - defer resend.Stop() - for { select { - case <-resend.C: + case <-time.After(500 * time.Millisecond): if _, err := p.sendRaw(relpkt); err != nil { p.errs <- fmt.Errorf("failed to re-send timed out reliable seqnum: %d: %w", sn, err) }