Skip to content

Commit 5d3ee0a

Browse files
committed
Fix panic when error occurs binding uTP socket
Fixes anacrolix#187.
1 parent 881f1a7 commit 5d3ee0a

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

client_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -1102,3 +1102,15 @@ func TestMultipleTorrentsWithEncryption(t *testing.T) {
11021102
tr.DownloadAll()
11031103
client.WaitAll()
11041104
}
1105+
1106+
func TestClientAddressInUse(t *testing.T) {
1107+
s, _ := NewUtpSocket("udp", ":50007")
1108+
if s != nil {
1109+
defer s.Close()
1110+
}
1111+
cfg := TestingConfig()
1112+
cfg.ListenAddr = ":50007"
1113+
cl, err := NewClient(cfg)
1114+
require.Error(t, err)
1115+
require.Nil(t, cl)
1116+
}

utp_go.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,10 @@ import (
77
)
88

99
func NewUtpSocket(network, addr string) (utpSocket, error) {
10-
return utp.NewSocket(network, addr)
10+
s, err := utp.NewSocket(network, addr)
11+
if s == nil {
12+
return nil, err
13+
} else {
14+
return s, err
15+
}
1116
}

utp_libutp.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,10 @@ import (
77
)
88

99
func NewUtpSocket(network, addr string) (utpSocket, error) {
10-
return utp.NewSocket(network, addr)
10+
s, err := utp.NewSocket(network, addr)
11+
if s == nil {
12+
return nil, err
13+
} else {
14+
return s, err
15+
}
1116
}

utp_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package torrent
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestNewUtpSocketErrorNilInterface(t *testing.T) {
10+
s, err := NewUtpSocket("fix", "your:language")
11+
assert.Error(t, err)
12+
if s != nil {
13+
t.Fatalf("expected nil, got %#v", s)
14+
}
15+
}

0 commit comments

Comments
 (0)