This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help: looking for equivalent syscall to shutdown() but for unix pipes


On Thu, Jan 17, 2019 at 9:48 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * Alexandre Bique:
>
> > I'm having an issue with pipes in a multi-threaded application.
> >
> > I have one thread (T1) reading a pipe in a loop, and I'd like to close
> > that pipe from an other thread (T2) and join T1.
> >
> > With sockets I'd use shutdown(fd, SHUT_RD).
>
> I don't think something like this exists for pipes.
>
> > What do you recommend?
>
> You need some sort of framing layer, so that you can transmit both data
> and an EOF indicator.

Thank you very much.

I'm not very enthusiast with the idea of sending an EOF message,
because the original producer comes from an other process, so there
could be all sorts of corrupted data over the pipe, unless maybe it is
using packets instead of streams. But in our case it is using streams.

I was thinking that I could use poll on the file descriptor and then
just check a flag before reading the pipe. Now to wake up the poll()
syscall I would need an eventfd which is an additional opened file,
not awesome.

It really seems that the solution to this problem would be a
shutdown() approach, everything else looks like a hack.

Regards,
-- 
Alexandre Bique


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]