[systemd-devel] Is a socket with Accept=yes and ListenFIFO impossible?

Mantas Mikulėnas grawity at gmail.com
Thu Sep 5 13:52:21 UTC 2024


FIFOs aren't sockets – they do not have an equivalent to accept() and there
is no multiplexing of inputs; all writes to the FIFO immediately go to the
"listening" file descriptor. So it's almost more like a datagram socket
than a stream one, in a sense.

If you want a true socket that's filesystem-based, create a Unix socket by
specifying the path via ListenStream, then connect to it using nc -U.

On Thu, Sep 5, 2024, 13:38 Steve Traylen <steve.traylen at cern.ch> wrote:

> Was trying to set up a trivial socket and service to process multiple
> inputs:
>
> # Socket emailoutput.socket
> [Unit]
> Description=Send email via a socket.
>
> [Socket]
> Accept=yes
> ListenFIFO=/run/emailoutput.socket
>
> # Service emailoutput at .service
> [Unit]
> Description=email
>
> [Service]
> ExecStart=/usr/bin/mailx -s 'Testing from socket' steve at example.ch
> StandardInput=socket
>
>
> Starting the socket always produces: "Unit configured for accepting
> sockets, but sockets are non-accepting. Refusing"
>
> Switching the socket to  "ListenStream=127.0.0.1:9999" then everything
> works I can netcat files into the network socket.
> Is it impossible to to Accept=yes with ListenFIFO?
>
>
> Motivation for was this i wanted to do perform a systemd-run of a
> command outputting to that socket to pipe it into mailx.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20240905/c8cd49ca/attachment.htm>


More information about the systemd-devel mailing list