cmd/client/main.go | 3 +++ cmd/server/main.go | 3 +++ internal/resolve.go | 27 ++++++++++++++++++--------- internal/version.go | 2 +- diff --git a/cmd/client/main.go b/cmd/client/main.go index 44e5f63ee0a873ed6f6c3761249fc87c9a64d0cc88dc1a96cb9d585fbc2aaeec..c54d41d9524b5d814fae7b1ca0ab8ae6c8f68e2878fa71558a467f5060b28981 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -87,6 +87,8 @@ playCmd := flag.String("play", "play "+vors.SoxParams, "play command") vadRaw := flag.Uint("vad", 0, "VAD threshold") passwd := flag.String("passwd", "", "protected room's password") muteToggle := flag.String("mute-toggle", "", "path to FIFO to toggle mute") + prefer4 := flag.Bool("4", false, + "Prefer obsolete legacy IPv4 address during name resolution") version := flag.Bool("version", false, "print version") warranty := flag.Bool("warranty", false, "print warranty information") flag.Parse() @@ -144,6 +146,7 @@ log.Fatal(err) } } + vors.PreferIPv4 = *prefer4 ctrl, err := net.DialTCP("tcp", nil, vors.MustResolveTCP(*srvAddr)) if err != nil { log.Fatalln("dial server:", err) diff --git a/cmd/server/main.go b/cmd/server/main.go index 51dd019cd2dea80eea6b7a56b9b0d101c48d70275cc9fe5f9166da926c3cfb00..4764ad16fd177a00ab432df8d66e4d2001d823b39985e97074a0f9f08a8105ed 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -309,6 +309,8 @@ func main() { bind := flag.String("bind", "[::1]:"+strconv.Itoa(vors.DefaultPort), "host:TCP/UDP port to listen on") kpFile := flag.String("key", "key", "path to keypair file") + prefer4 := flag.Bool("4", false, + "Prefer obsolete legacy IPv4 address during name resolution") version := flag.Bool("version", false, "print version") warranty := flag.Bool("warranty", false, "print warranty information") flag.Parse() @@ -331,6 +333,7 @@ } Prv, Pub = data[:len(data)/2], data[len(data)/2:] } + vors.PreferIPv4 = *prefer4 lnTCP, err := net.ListenTCP("tcp", net.TCPAddrFromAddrPort(netip.MustParseAddrPort(*bind))) if err != nil { diff --git a/internal/resolve.go b/internal/resolve.go index ceffc33366d1269a9b303332f9a80e96d3c275527f25cf3c51883484170190ce..d64156c80adf85badf8b4b0a40ef8718eb7928dddc50484b4048929ebea75546 100644 --- a/internal/resolve.go +++ b/internal/resolve.go @@ -1,31 +1,40 @@ package internal -import "net" +import ( + "log" + "net" +) const DefaultPort = 12978 + +var PreferIPv4 bool func MustResolveTCP(s string) (addr *net.TCPAddr) { var err error - addr, err = net.ResolveTCPAddr("tcp6", s) - if err == nil { - return addr + if !PreferIPv4 { + addr, err = net.ResolveTCPAddr("tcp6", s) + if err == nil { + return addr + } } addr, err = net.ResolveTCPAddr("tcp4", s) if err != nil { - panic(err) + log.Fatal(err) } return } func MustResolveUDP(s string) (addr *net.UDPAddr) { var err error - addr, err = net.ResolveUDPAddr("udp6", s) - if err == nil { - return addr + if !PreferIPv4 { + addr, err = net.ResolveUDPAddr("udp6", s) + if err == nil { + return addr + } } addr, err = net.ResolveUDPAddr("udp4", s) if err != nil { - panic(err) + log.Fatal(err) } return } diff --git a/internal/version.go b/internal/version.go index ecc49fb709acb59da93bdaf8caf6d227ad9acf599d81a1b74a98a982337c3190..741fb4075e057196380210174d67c361a4021be5e0d374512b3a0b6240673927 100644 --- a/internal/version.go +++ b/internal/version.go @@ -3,7 +3,7 @@ import "runtime" const ( - Version = "2.2.0" + Version = "2.3.0" Warranty = `Copyright (C) 2024 Sergey Matveev This program is free software: you can redistribute it and/or modify