Ah. Fascinating. Thanks! Whaddya say I submit a doc patch mentioning that (a) it's up to the user to flush the buffer (if they want to) when using shutdown_stdin and (b) get_driver_out_octets is a handy part of the process.
For that matter, should I take a stab at documenting get_driver_out_octets and get_driver_out_messages in POE::Wheel::Run (or POE::Wheel?) since they aren't mentioned anywhere? Dan On 12/21/04 9:57 PM, "Rocco Caputo" <[EMAIL PROTECTED]> wrote: > On Tue, Dec 21, 2004 at 08:39:53PM -0800, Dan McCormick wrote: >> So consider this: >> >> I have a stream of data, which I'm sending to the POE::Wheel::Run process. >> At an arbitrary time I can get a signal that the stream has ended, at which >> point I want to shutdown the process's STDIN. >> >> If I knew the last bit of data sent was going to be the last bit of data, I >> could set a flag as I send it to the POE::Wheel::Run process, and then the >> next StdinEvent could call stdin_shutdown. But I don't know which bit of >> data is going to be the last. >> >> So when I receive the signal to shutdown STDIN, I don't know if the STDIN >> buffer is flushed or not (do I?). I can set a flag, but if it's already >> flushed, the StdinEvent will never get called. >> >> It seems I need a way to tell if there's anything pending in the buffer. >> >> Checking $wheel->get_stdin_filter->get_pending() seems like a good bet, but >> doesn't seem to be working -- it always seems to return false, even though >> if I then call stdin_shutdown the data never arrives at my process. >> >> Any suggestions? Am I missing something? > > Yep! > > The child's STDIN is the wheel's otput buffer. Whenever you put() > something to a wheel, you're writing whole "things" (where "thing" is > defined by the filter you're using). > > Since things are sent whole, filters don't need to buffer them for > output. Rather, they convert them and return them right away. The > serialized "things" are sent to the driver for flushing "in a little > while". > > Anyway, most wheels have get_driver_out_octets() methods that tell you > how many octets are waiting in the driver to be flushed. I think > that's what you're looking for.