diff options
Diffstat (limited to '')
-rw-r--r-- | serve_mx.go (renamed from mx_recv.go) | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -13,6 +13,7 @@ import ( "github.com/jackc/pgx/v5/pgxpool" "go.lindenii.runxiyu.org/lindenii-common/mailkit" + "go.lindenii.runxiyu.org/lindenii-common/clog" ) type server_state_t uint @@ -229,3 +230,35 @@ func handle_mx_recv_conn(ctx context.Context, net_conn net.Conn) error { } return session.handle(ctx) } + +func serve_mx() { + listener, err := net.Listen(config.MX.Net, config.MX.Addr) + if err != nil { + clog.Fatal(1, "MX: Cannot listen: "+err.Error()) + } + defer listener.Close() + clog.Info("MX: Listening via " + config.MX.Net + " on " + config.MX.Addr) + + for { + conn, err := listener.Accept() + if err != nil { + clog.Error("MX: Cannot accept connection: " + err.Error()) + } + clog.Info("MX: Accepted connection from " + conn.RemoteAddr().String()) + + go func() { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + err := handle_mx_recv_conn(ctx, conn) + if err != nil { + if err == err_connection_handler_eof { + clog.Info("MX: Connection for " + conn.RemoteAddr().String() + " closed with EOF") + } else { + clog.Error("MX: Connection handler for " + conn.RemoteAddr().String() + " returned error: " + err.Error()) + } + } else { + clog.Info("MX: Connection for " + conn.RemoteAddr().String() + " closed gracefully") + } + }() + } +} |