fix: 添加relay日志
This commit is contained in:
@@ -196,15 +196,26 @@ func generateKCPConversationID() (uint32, error) {
|
||||
return convID, nil
|
||||
}
|
||||
|
||||
func listenKCPPacketConn(listenAddr, bindDevice string, logger KCPPacketDebugLogger, nodeRole, nodeID string) (net.PacketConn, error) {
|
||||
// ResolveUDPListenConfig parses a UDP listen address and returns the socket
|
||||
// family that should be used for binding it.
|
||||
func ResolveUDPListenConfig(listenAddr string) (string, *net.UDPAddr, error) {
|
||||
udpAddr, err := net.ResolveUDPAddr("udp", listenAddr)
|
||||
if err != nil {
|
||||
return "", nil, fmt.Errorf("transport: resolve udp listen addr %s: %w", listenAddr, err)
|
||||
}
|
||||
|
||||
return udpListenNetwork(udpAddr), udpAddr, nil
|
||||
}
|
||||
|
||||
func listenKCPPacketConn(listenAddr, bindDevice string, logger KCPPacketDebugLogger, nodeRole, nodeID string) (net.PacketConn, error) {
|
||||
network, udpAddr, err := ResolveUDPListenConfig(listenAddr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("transport: resolve kcp listen addr %s: %w", listenAddr, err)
|
||||
}
|
||||
|
||||
rawConn, err := listenUDPConn("udp", udpAddr, bindDevice)
|
||||
rawConn, err := listenUDPConn(network, udpAddr, bindDevice)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("transport: listen udp for kcp on %s: %w", listenAddr, err)
|
||||
return nil, fmt.Errorf("transport: listen %s for kcp on %s: %w", network, udpListenAddr(udpAddr), err)
|
||||
}
|
||||
|
||||
packetConn, err := newKCPPacketConn(rawConn, logger, nodeRole, nodeID)
|
||||
@@ -280,3 +291,13 @@ func udpListenAddr(addr *net.UDPAddr) string {
|
||||
}
|
||||
return addr.String()
|
||||
}
|
||||
|
||||
func udpListenNetwork(addr *net.UDPAddr) string {
|
||||
if addr == nil || addr.IP == nil {
|
||||
return "udp"
|
||||
}
|
||||
if addr.IP.To4() != nil {
|
||||
return "udp4"
|
||||
}
|
||||
return "udp6"
|
||||
}
|
||||
|
||||
@@ -204,6 +204,55 @@ func TestKCPCloseIsIdempotent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveUDPListenConfigSelectsSocketFamily(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
listenAddr string
|
||||
wantNetwork string
|
||||
wantAddr string
|
||||
}{
|
||||
{
|
||||
name: "ipv4 unspecified",
|
||||
listenAddr: "0.0.0.0:10909",
|
||||
wantNetwork: "udp4",
|
||||
wantAddr: "0.0.0.0:10909",
|
||||
},
|
||||
{
|
||||
name: "ipv4 loopback",
|
||||
listenAddr: "127.0.0.1:10909",
|
||||
wantNetwork: "udp4",
|
||||
wantAddr: "127.0.0.1:10909",
|
||||
},
|
||||
{
|
||||
name: "ipv6 loopback",
|
||||
listenAddr: "[::1]:10909",
|
||||
wantNetwork: "udp6",
|
||||
wantAddr: "[::1]:10909",
|
||||
},
|
||||
{
|
||||
name: "host omitted",
|
||||
listenAddr: ":10909",
|
||||
wantNetwork: "udp",
|
||||
wantAddr: ":10909",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
gotNetwork, gotAddr, err := ResolveUDPListenConfig(tt.listenAddr)
|
||||
if err != nil {
|
||||
t.Fatalf("ResolveUDPListenConfig(%q) error = %v", tt.listenAddr, err)
|
||||
}
|
||||
if gotNetwork != tt.wantNetwork {
|
||||
t.Fatalf("network = %q, want %q", gotNetwork, tt.wantNetwork)
|
||||
}
|
||||
if gotAddr.String() != tt.wantAddr {
|
||||
t.Fatalf("addr = %q, want %q", gotAddr.String(), tt.wantAddr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func newKCPConnPair(t *testing.T, senderOpts []KCPOption, receiverOpts []KCPOption, senderPacketLogger KCPPacketDebugLogger, receiverPacketLogger KCPPacketDebugLogger) (*KCPConn, <-chan kcpAcceptResult, func()) {
|
||||
t.Helper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user