client_test.go | 7 +++++-- t.go | 2 +- tracker/udp/udp_test.go | 6 ++++-- tracker/udp/udp_unix.go | 14 ++++++++++++++ tracker/udp/udp_windows.go | 11 +++++++++++ diff --git a/client_test.go b/client_test.go index 1000c3b03ae289f6824ccdaa9aabfb0b93eff3e7..22281efd6cde9bf0eaa6a0b03d7f48150ee5a500 100644 --- a/client_test.go +++ b/client_test.go @@ -788,13 +788,16 @@ ) } func TestClientAddressInUse(t *testing.T) { - s, _ := NewUtpSocket("udp", ":50007", nil, log.Default) + s, _ := NewUtpSocket("udp", "localhost:50007", nil, log.Default) if s != nil { defer s.Close() } - cfg := TestingConfig(t).SetListenAddr(":50007") + cfg := TestingConfig(t).SetListenAddr("localhost:50007") cfg.DisableUTP = false cl, err := NewClient(cfg) + if err == nil { + assert.Nil(t, cl.Close()) + } require.Error(t, err) require.Nil(t, cl) } diff --git a/t.go b/t.go index af4fdec7f3c000cc6ab2fd36cb5204ac891c403a..45856cc7acbeaa5988074f74435d078a49111a57 100644 --- a/t.go +++ b/t.go @@ -235,8 +235,8 @@ } func (t *Torrent) AddPeers(pp []PeerInfo) (n int) { t.cl.lock() + defer t.cl.unlock() n = t.addPeers(pp) - t.cl.unlock() return } diff --git a/tracker/udp/udp_test.go b/tracker/udp/udp_test.go index 51f58e4c2c1cfa533d49be9d963408d91f17194e..64aeb80ff7426c514f5f63e7c2eab71fb1b5851b 100644 --- a/tracker/udp/udp_test.go +++ b/tracker/udp/udp_test.go @@ -57,8 +57,10 @@ defer c.Close() for msgLen := 1; ; msgLen *= 2 { n, err := c.Write(make([]byte, msgLen)) if err != nil { - require.Contains(t, err.Error(), "message too long") - return + if isErrMessageTooLong(err) { + return + } + t.Fatalf("expected message too long error: %v", err) } if n < msgLen { t.FailNow() diff --git a/tracker/udp/udp_unix.go b/tracker/udp/udp_unix.go new file mode 100644 index 0000000000000000000000000000000000000000..6fcf9ed18ec7c73d234de7ff7b6720b7a043c37d --- /dev/null +++ b/tracker/udp/udp_unix.go @@ -0,0 +1,14 @@ +//go:build !windows + +package udp + +import ( + "strings" +) + +func isErrMessageTooLong(err error) bool { + if err == nil { + return false + } + return strings.Contains(err.Error(), "message too long") +} diff --git a/tracker/udp/udp_windows.go b/tracker/udp/udp_windows.go new file mode 100644 index 0000000000000000000000000000000000000000..a289e9ec500e20db362c2ceae4bfa38643c299f2 --- /dev/null +++ b/tracker/udp/udp_windows.go @@ -0,0 +1,11 @@ +package udp + +import ( + "errors" + + "golang.org/x/sys/windows" +) + +func isErrMessageTooLong(err error) bool { + return errors.Is(err, windows.WSAEMSGSIZE) +}