|Pranav Karawale 49a34a2bc6
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.
To run a command
myserver http everytime a connection to the socket
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
-- 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
For more technical information, run
This demo requires
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
You can also try this using
$ curl --unix-socket /tmp/cat.sock http://localhost/hello --http0.9
GET /hello HTTP/1.1
It printed the request curl sent to the socket.
ipcsockd requires a Rust toolchain to compile. To build a debug build (ideal for testing/reporting bugs), run
For a release build (ideal to distribute or run in production), run
cargo build --release
Copyright and license notices
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