[systemd-devel] Problem with sd_listen_fds(0)
Donat Zenichev
donat.zenichev at gmail.com
Thu Jun 27 10:29:24 UTC 2019
Hi systemd community.
Recently I've come accross one interesting problem with API of systemd.
The problem is that, I'm not able to read commands comming to the AF_UNIX
socket, that was created by systemd and passed to my program using
sd_listen_fds(0) function.
What actually program requires, is AF_UNIX (AF_LOCAL) socket of type
SOCK_STREAM.
In case if I create this socket manually, using socket(AF_LOCAL,
SOCK_STREAM, 0) function, it works out as expected.
But, when I create a socket using systemd socket unit, reading fails with
"-1" return value.
What I actually do, is that I check if there are some sockets created for
me using sd_listen_fds(0), and in case it returns 1 (so 1 socket created),
program goes further and sets a file descriptor value to fd =
SD_LISTEN_FDS_START + 0;
Since the SD_LISTEN_FDS_START is pre-defined to value '3', my file
descriptor will always be '3'.
But when it comes to reading, with read() function, it fails with the errno
EINVAL - Invalid argument.
It's not a matter of a other parameters than a file descriptor, since with
manual creation of socket it works out as I said.
An initializing of the socket descriptor, when creating it by systemd
passes as normal, so program starts.
But any further command received on fd fails with '-1' return value.
So my question is, where should I look into?
Socket unit file:
```
[Socket]
ListenStream=/var/run/foobar/foobar.sock
SocketUser=foouser
SocketGroup=foogroup
SocketMode=755
ExecStartPost=-/bin/chown foouser:foogroup /var/run/foobar
[Install]
WantedBy=sockets.target
```
--
--
BR, Donat Zenichev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20190627/256eb76e/attachment.html>
More information about the systemd-devel
mailing list