diff --git a/gold/link/listen.go b/gold/link/listen.go index 0927277..1290cbb 100644 --- a/gold/link/listen.go +++ b/gold/link/listen.go @@ -5,7 +5,6 @@ import ( "errors" "io" "net" - "reflect" "runtime" "strconv" "sync" @@ -174,7 +173,7 @@ func (m *Me) dispatch(packet *head.Packet, addr p2p.EndPoint, index int, finish packet.Put() return } - if reflect.ValueOf(p.endpoint).IsZero() || !p.endpoint.Euqal(addr) { + if helper.IsNilInterface(p.endpoint) || !p.endpoint.Euqal(addr) { if m.ep.Network() == "tcp" && !addr.Euqal(p.endpoint) { logrus.Infoln("[listen] @", index, "set endpoint of peer", p.peerip, "to", addr.String()) p.endpoint = addr diff --git a/gold/link/me.go b/gold/link/me.go index 5782014..1bf0c82 100644 --- a/gold/link/me.go +++ b/gold/link/me.go @@ -5,7 +5,6 @@ import ( "encoding/hex" "io" "net" - "reflect" "strconv" "sync" "time" @@ -136,7 +135,7 @@ func NewMe(cfg *MyConfig) (m Me) { func (m *Me) Restart() error { oldconn := m.conn m.conn = nil - if !reflect.ValueOf(oldconn).IsZero() { + if helper.IsNonNilInterface(oldconn) { _ = oldconn.Close() } var err error @@ -177,7 +176,7 @@ func (m *Me) EndPoint() p2p.EndPoint { func (m *Me) Close() error { m.connections = nil - if !reflect.ValueOf(m.conn).IsZero() { + if helper.IsNonNilInterface(m.conn) { _ = m.conn.Close() m.conn = nil } diff --git a/gold/link/nat.go b/gold/link/nat.go index e669d18..c661b24 100644 --- a/gold/link/nat.go +++ b/gold/link/nat.go @@ -2,7 +2,6 @@ package link import ( "encoding/json" - "reflect" "sync/atomic" "time" "unsafe" @@ -70,7 +69,7 @@ func (l *Link) onNotify(packet []byte) { if err == nil { p, ok := l.me.IsInPeer(peer) if ok { - if reflect.ValueOf(p.endpoint).IsZero() || !p.endpoint.Euqal(addr) { + if helper.IsNilInterface(p.endpoint) || !p.endpoint.Euqal(addr) { p.endpoint = addr logrus.Infoln("[nat] notify set ep of peer", peer, "to", ep) } @@ -110,7 +109,7 @@ func (l *Link) onQuery(packet []byte) { lnk, ok := l.me.IsInPeer(p) eps := "" if l.me.ep.Network() == "udp" { // udp has real p2p - if reflect.ValueOf(lnk.endpoint).IsZero() { + if helper.IsNilInterface(lnk.endpoint) { continue } eps = lnk.endpoint.String() @@ -121,7 +120,7 @@ func (l *Link) onQuery(packet []byte) { if eps == "" { continue } - if ok && !reflect.ValueOf(lnk.endpoint).IsZero() { + if ok && helper.IsNonNilInterface(lnk.endpoint) { notify[p] = [2]string{ lnk.endpoint.Network(), eps, diff --git a/gold/link/send.go b/gold/link/send.go index 8ffac94..0cf183f 100644 --- a/gold/link/send.go +++ b/gold/link/send.go @@ -9,7 +9,6 @@ import ( "fmt" "io" "math/rand" - "reflect" "github.com/klauspost/compress/zstd" "github.com/sirupsen/logrus" @@ -124,7 +123,7 @@ func (l *Link) write(p *head.Packet, teatype uint8, additional uint16, datasz ui // write 向 peer 发一个包 func (l *Link) writeonce(p *head.Packet, teatype uint8, additional uint16, datasz uint32, offset uint16, istransfer, hasmore bool, seq uint32) (int, error) { peerep := l.endpoint - if reflect.ValueOf(peerep).IsZero() { + if helper.IsNilInterface(peerep) { return 0, errors.New("nil endpoint of " + p.Dst.String()) } diff --git a/helper/data.go b/helper/data.go index 874b10a..6b860cd 100644 --- a/helper/data.go +++ b/helper/data.go @@ -1,6 +1,7 @@ package helper import ( + "reflect" "unsafe" ) @@ -30,3 +31,11 @@ func StringToBytes(s string) (b []byte) { bh.cap = sh.len return b } + +func IsNilInterface(x any) bool { + return x == nil || reflect.ValueOf(x).IsZero() +} + +func IsNonNilInterface(x any) bool { + return !IsNilInterface(x) +}