I was reading the diff wrong, sorry about that. How about Stdio.Port()->listen_fd()?
Arne On 02/11/17 23:11, Chris Angelico wrote: > On Sun, Feb 12, 2017 at 8:36 AM, Arne Goedeke <[email protected]> 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 >
