From 73dd34036b942be92d48d3469071bde299024688 Mon Sep 17 00:00:00 2001 From: Max Nikitenko Date: Fri, 17 Jun 2022 09:59:05 +0300 Subject: [PATCH] feat(transport): Add unix socket transport; --- transport/unix.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 transport/unix.go diff --git a/transport/unix.go b/transport/unix.go new file mode 100644 index 0000000..f477d42 --- /dev/null +++ b/transport/unix.go @@ -0,0 +1,52 @@ +//Package transport provides transports for rpc server +// +//Copyright (C) 2022 Max Nikitenko +// +//This file is part of go.neonxp.dev/jsonrpc2 project. +// +//This program is free software: you can redistribute it and/or modify +//it under the terms of the GNU General Public License as published by +//the Free Software Foundation, either version 3 of the License, or +//(at your option) any later version. +// +//This program is distributed in the hope that it will be useful, +//but WITHOUT ANY WARRANTY; without even the implied warranty of +//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//GNU General Public License for more details. +// +//You should have received a copy of the GNU General Public License +//along with this program. If not, see . +package transport + +import ( + "context" + "net" +) + +type UnixSocket struct { + Path string + Parallel bool +} + +func (t *UnixSocket) Run(ctx context.Context, resolver Resolver) error { + tcpAddr, err := net.ResolveUnixAddr("unix", t.Path) + if err != nil { + return err + } + ln, err := net.ListenUnix("unix", tcpAddr) + if err != nil { + return err + } + + go func() { + <-ctx.Done() + _ = ln.Close() + }() + for { + conn, err := ln.Accept() + if err != nil { + return err + } + go resolver.Resolve(ctx, conn, conn, t.Parallel) + } +}