A super-server daemon for UNIX domain sockets.
Go to file
Pranav Karawale 49a34a2bc6
Add license notices
2022-10-15 20:25:45 +05:30
src Add README, remove man page 2022-10-14 16:55:14 +05:30
.gitignore Initial Commit 2022-10-12 09:40:20 +05:30
AGPL-3.0.txt Initial Commit 2022-10-12 09:40:20 +05:30
Cargo.lock Manual page generation 2022-10-12 12:25:28 +05:30
Cargo.toml Manual page generation 2022-10-12 12:25:28 +05:30
LICENSE Add license notices 2022-10-15 20:25:45 +05:30
README.md Update README 2022-10-14 17:00:40 +05:30

ipcsockd

ipcsockd (inter-process communication socket daemon) is a super-server daemon for UNIX domain sockets. Think of it as xinetd but for UNIX domain sockets.

Examples

To run a command myserver http everytime a connection to the socket a.sock in the current directory is made:

ipcsockd ./a.sock myserver http

For each incoming connection, ipcsockd will execute the command myserver http in a separate thread, with passing input from the socket to the thread's stdin, and passing output from the thread's stdout back to the socket.

To run a command with flags (ex. myserver http --cool-feature -v), prepend the command with a -- to escape those arguments:

ipcsockd ./a.sock -- myserver http --cool-feature -v 

If -- is not provided, ipcsockd will assume those flags were meant for itself rather than for the command.

To perform the same given above, but limit concurrent connections to 20:

ipcsockd -l 20 ./a.sock -- myserver http --cool-feature -v

ipcsockd is not limited to just HTTP applications. You can do much more with it.

For more technical information, run ipcsockd --help.

Real demo

This demo requires ncat (nc) to be installed.

Here, we create a socket /tmp/cat.sock which echoes what you send to the socket back. Bind to the socket using ipcsockd and instruct it to run cat(1) for each connection.

ipcsockd /tmp/cat.sock cat

It should print "OK". Now, in another terminal, run

echo "hello" | nc -U /tmp/cat.sock

It will print "hello" back!

$ echo "hello" | nc -U /tmp/cat.sock
hello

You can also try this using curl(1):

$ curl --unix-socket /tmp/cat.sock http://localhost/hello --http0.9
GET /hello HTTP/1.1
Host: localhost
User-Agent: curl/7.82.0
Accept: */*

It printed the request curl sent to the socket.

Install

ipcsockd requires a Rust toolchain to compile. To build a debug build (ideal for testing/reporting bugs), run

cargo build

For a release build (ideal to distribute or run in production), run

cargo build --release

Relevant/similar work

Copyright (C) 2022 Pranav Karawale https://karawale.in

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero 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 Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This notice and license notices of dependencies can be found in the LICENSE file.