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()
}
}
+ vors.PreferIPv4 = *prefer4
ctrl, err := net.DialTCP("tcp", nil, vors.MustResolveTCP(*srvAddr))
if err != nil {
log.Fatalln("dial server:", err)
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()
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 {
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
}
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