http://www.perlmonks.org?node_id=807309


in reply to How can I determine the server is waiting for input in POE::Wheel::ReadWrite?

As a simplification, you may want to think of the processing of network data the same way as reading a file while some other process is writing to it.

You cannot determine without some protocol when a "block" of data is complete. The common solutions to this problem are:

a) the above mentioned "end of block" marker. In the case of a line-based protocol, the newline character serves as an end-of-block marker. This is especially useful if its inefficient to know the length of a block in advance (usually, because the block is large and takes a long time to compute). And line-based protocols are just nice to read for humans, which can also be a big help in analyzing any problems.

b) prefix the block with its length. HTTP for instance provides a mechanism for this using the content-length header. Many binary protocols work the same way. When possible, this gives a few advantages over end-of-block markers; the client will know how much memory to allocate for the incoming data, and it can make it easier to pass the data on without any additional processing.