aboutsummaryrefslogtreecommitdiff
path: root/serve_mx.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-01-13 15:29:39 +0800
committerRunxi Yu <me@runxiyu.org>2025-01-13 15:31:55 +0800
commitf86cbd83d86473f405ec60a7a78cf28c64150f31 (patch)
tree986d5e3ec86eb1a13baad39d3f7e1c73f2e29830 /serve_mx.go
parentFix config file error message (diff)
downloadmaild-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
diff --git a/mx_recv.go b/serve_mx.go
index 33b4012..f3c1527 100644
--- a/mx_recv.go
+++ b/serve_mx.go
@@ -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")
+ }
+ }()
+ }
+}