summaryrefslogtreecommitdiff
path: root/rudp
diff options
context:
space:
mode:
authoranon5 <anon5clam@protonmail.com>2021-02-20 16:31:06 +0000
committeranon5 <anon5clam@protonmail.com>2021-02-20 16:31:06 +0000
commit8b61ee961a9191fd2731a48d46f33b561a316032 (patch)
tree5d9423e8e0dafbc2fb2b4cf91266ec4bdd19b305 /rudp
parent14c04859a14edfe326d9664107707c0c1ae90dea (diff)
rudp: deprecate ErrClosed and replace with net.ErrClosed
Diffstat (limited to 'rudp')
-rw-r--r--rudp/listen.go4
-rw-r--r--rudp/net.go9
-rw-r--r--rudp/peer.go6
-rw-r--r--rudp/process.go7
-rw-r--r--rudp/proxy/proxy.go4
-rw-r--r--rudp/send.go7
6 files changed, 14 insertions, 23 deletions
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)
}