<div dir="auto">A service could receive multiple listeners sockets, but I don't remember systemd having an option to pass client connection sockets – and I don't think it would make much sense, as the SMTP server is likely to close the connection while the service is still running, and then systemd would definitely have no way to inject a replacement socket.<div dir="auto"><br></div><div dir="auto">Instead, I'd probably make the fcgi service talk SMTP to localhost or even over a Unix socket (i.e. to a local MTA); filesystem-based Unix sockets are  not bound to a network namespace.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 5, 2024, 17:25 Andrea Pappacoda <<a href="mailto:andrea@pappacoda.it">andrea@pappacoda.it</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi all!<br>
<br>
I'm writing a small FastCGI daemon which, in addition to the socket used<br>
to talk FastCGI to the web server, talks SMTP through another (inet)<br>
socket (as an SMTP client).<br>
<br>
The FastCGI socket is created by systemd with a .socket unit and passed<br>
to the service as an fd (which also enables socket activation), while<br>
the SMTP socket is opened and managed by the daemon itself.<br>
<br>
What I'm asking here is if there's a way to also pass the SMTP socket as<br>
a file descriptor to the daemon from systemd, so that the daemon doesn't<br>
need to manage sockets itself (as all it does is reading fds passed by<br>
the service manager) and can be further restricted with options like<br>
PrivateNetwork=yes.<br>
<br>
Ideally, I'd just get fd 3 and use it to listen for incoming requests,<br>
and get fd 4 and use it to talk TLS + SMTP over TCP to the remote (or<br>
local) SMTP server.<br>
<br>
Is this currently possible with systemd? Am I missing something which<br>
would make this a bad idea?<br>
<br>
Thanks!<br>
</blockquote></div>