package main import ( "context" "errors" "fmt" "io" "net" "os" "os/signal" "syscall" "time" sdkvsock "github.com/firecracker-microvm/firecracker-go-sdk/vsock" "github.com/sirupsen/logrus" "banger/internal/vsockping" ) func main() { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel() logger := logrus.New() logger.SetOutput(io.Discard) listener, err := sdkvsock.Listener(ctx, logrus.NewEntry(logger), vsockping.Port) if err != nil { fmt.Fprintf(os.Stderr, "banger-vsock-pingd: %v\n", err) os.Exit(1) } defer listener.Close() for { conn, err := listener.Accept() if err != nil { if ctx.Err() != nil || errors.Is(err, net.ErrClosed) { return } fmt.Fprintf(os.Stderr, "banger-vsock-pingd: accept: %v\n", err) time.Sleep(200 * time.Millisecond) continue } go func(conn net.Conn) { if err := vsockping.ServeConn(conn); err != nil { fmt.Fprintf(os.Stderr, "banger-vsock-pingd: %v\n", err) } }(conn) } }