diff options
author | Runxi Yu <me@runxiyu.org> | 2025-01-13 15:29:39 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-01-13 15:31:55 +0800 |
commit | f86cbd83d86473f405ec60a7a78cf28c64150f31 (patch) | |
tree | 986d5e3ec86eb1a13baad39d3f7e1c73f2e29830 /serve_mx.go | |
parent | Fix config file error message (diff) | |
download | maild-f86cbd83d86473f405ec60a7a78cf28c64150f31.tar.gz maild-f86cbd83d86473f405ec60a7a78cf28c64150f31.tar.zst maild-f86cbd83d86473f405ec60a7a78cf28c64150f31.zip |
Refactor mx stuff
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") + } + }() + } +} |