diff options
author | Max Nikitenko <max.nikitenko@namecheap.com> | 2022-06-17 09:59:05 +0300 |
---|---|---|
committer | Max Nikitenko <max.nikitenko@namecheap.com> | 2022-06-17 09:59:05 +0300 |
commit | 73dd34036b942be92d48d3469071bde299024688 (patch) | |
tree | afed62555b0ba77220f228cdc66b1116a52cd601 | |
parent | 3d5463c820b6fd32805caf53dedbddfea9c5bae9 (diff) |
feat(transport): Add unix socket transport;
-rw-r--r-- | transport/unix.go | 52 |
1 files changed, 52 insertions, 0 deletions
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 <moaddib666@gmail.com> +// +//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 <https://www.gnu.org/licenses/>. +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) + } +} |