37 lines
668 B
Go
37 lines
668 B
Go
package cmd
|
|
|
|
import (
|
|
"net"
|
|
"net/netip"
|
|
|
|
"github.com/charmbracelet/log"
|
|
)
|
|
|
|
func runServer(server func(net.Listener) error) {
|
|
if proto != "tcp" && proto != "udp" {
|
|
log.Fatal("unsupported protocol, must be either tcp or udp")
|
|
}
|
|
|
|
if v6 {
|
|
proto += "6"
|
|
}
|
|
|
|
addr, ok := netip.AddrFromSlice(ip)
|
|
if !ok {
|
|
log.Fatal("invalid ip")
|
|
}
|
|
|
|
ap := netip.AddrPortFrom(addr, port)
|
|
|
|
listener, err := net.Listen(proto, ap.String())
|
|
if err != nil {
|
|
log.Fatal("unable to listen", "err", err)
|
|
}
|
|
|
|
log.Info("starting server", "proto", proto, "ip", ip, "port", port)
|
|
|
|
err = server(listener)
|
|
if err != nil {
|
|
log.Fatal("error while handling connections", "err", err)
|
|
}
|
|
}
|