使用 systemd <service>.socket 时,哪个文件描述符接收套接字?
When using a systemd <service>.socket, which file descriptor receives the socket(s)?
当我创建 <service>.socket
systemd 文件时,我可以包含以下条目:
ListenDatagram=/run/<service>/listen.sock
ListenFIFO=/run/<service>/IPC.FIFO
等等
systemd.socket documentation 表示这些套接字作为文件描述符传递到我的应用程序。我没有看到的是:这些是哪些文件描述符?会是 3、4、5……等等吗?还是代替0(输入)和1(输出)?
换句话说,在我的软件中,我怎么知道什么是什么?
请注意,我假设我的 <service>.socket
将使用:
Accept=no
因为 Accept=yes
明确表示它像 inetd
一样工作,这意味着 stdin
和 stdout
按预期接收输入和输出套接字(对于 TCP 流,即将重复相同的套接字)。
应该是 3、4、5、6 ...
sd_listen_fds() may be invoked by a daemon to check for file
descriptors passed by the service manager as part of the socket-based
activation logic. It returns the number of received file descriptors.
If no file descriptors have been received, zero is returned. The first
file descriptor may be found at file descriptor number 3 (i.e.
SD_LISTEN_FDS_START), the remaining descriptors follow at 4, 5, 6, …,
if any.
当我创建 <service>.socket
systemd 文件时,我可以包含以下条目:
ListenDatagram=/run/<service>/listen.sock
ListenFIFO=/run/<service>/IPC.FIFO
等等
systemd.socket documentation 表示这些套接字作为文件描述符传递到我的应用程序。我没有看到的是:这些是哪些文件描述符?会是 3、4、5……等等吗?还是代替0(输入)和1(输出)?
换句话说,在我的软件中,我怎么知道什么是什么?
请注意,我假设我的 <service>.socket
将使用:
Accept=no
因为 Accept=yes
明确表示它像 inetd
一样工作,这意味着 stdin
和 stdout
按预期接收输入和输出套接字(对于 TCP 流,即将重复相同的套接字)。
应该是 3、4、5、6 ...
sd_listen_fds() may be invoked by a daemon to check for file descriptors passed by the service manager as part of the socket-based activation logic. It returns the number of received file descriptors. If no file descriptors have been received, zero is returned. The first file descriptor may be found at file descriptor number 3 (i.e. SD_LISTEN_FDS_START), the remaining descriptors follow at 4, 5, 6, …, if any.