This is the mail I received by whiteknight, which I assume he just forgot to address to parrot-dev:
On Sun, Mar 10, 2013 at 11:01 PM, Andrew Whitworth wrote: > That decision, along with several other decisions made in the IO > rewrite stem from my own personal preferences and a few test cases. If > my preferences don't match what other developers think parrot should > do, please feel free to correct it. > > There is a very real case that a line of text may be sent without a > trailing newline. Several of our tests for FileHandle.readline test > this very thing (the last line in a file that isn't terminated with a > newline, etc). In those cases, Socket.readline would be looking for a > newline character and would hang forever not finding it. Without a > better system for specifying and handling timeouts, it seemed to me > like the best thing to do was not wait forever on an input buffer > which is never going to be filled. > > Please don't hesitate to replace my code with something better. > > Thanks, > > --Andrew Whitworth The problem is that if you did not receive the line terminator, it's impossible to decide if what you just got is a whole line or just the first part of one. The current codebase only tries one read and bails out early if no terminator has been seen yet. This means that long lines that don't arrive in a single chunk (my test case was a 500 bytes long string) will be split, and we need to duplicate logic that's already in Parrot at a higher layer if we want lines to arrive at the receiving end the same way they were sent. I attempted just that in my Rakudo pull request, but messed up an edge case (multi-character line terminator split across multiple chunks). Imo the best approach for now would be to just remove the early bail out and work on providing an explicit timeout parameter at a later date. If we keep the status quo, I'll be forced to fix my Rakudo-side changes, which will become obsolete once the Parrot gets its act together. -- gerdr PS@whiteknight: if you have the time, could you please read through my changes to io_readline_encoded_string() - https://github.com/gerdr/parrot/blob/3c59862dec40205cde331b8c302eae4df4f47103/src/io/utilities.c#L410 - and see if they make sense? _______________________________________________ http://lists.parrot.org/mailman/listinfo/parrot-dev