On Sun, Feb 12, 2017 at 8:36 AM, Arne Goedeke el@laramies.com wrote:
I had a look at your branch. My feeling is that this would be better placed into a seperate module. Maybe there will be more things that might be useful when interacting with systemd?
Maybe; if so, Stdio.Port would need to expose a way for a module to say "here, make one of you from this fd".
If I understand the API correctly, then the number of passed file descriptors will be placed into an environment variable. Why does this not work purely in pike?
int n = (int)getenv("LISTEN_FDS"); array a = allocate(n);
for (int i = 0; i < n; i++) a[i] = Stdio.File(3+i);
You can't accept() on a Stdio.File. That technique would probably work for an active (connected) socket, but not for a passive (listening) one.
The reason I wrote the code as a patch to Pike rather than doing it in my own application is that Pike doesn't expose a way to construct a Stdio.Port from any existing fd other than stdin. Maybe there should be an API for that instead? I don't know of any other situations that would use it, though, and it's good to check LISTEN_PID before claiming the FDs. It might also be useful to parse LISTEN_FDNAMES and use that in the sprintf("%O") of the Port, which would help with debugging; not a huge feature, but one that can easily be added in the future if it's done this way, whereas there's no easy way to control that from pure Pike code.
ChrisA