I'm writing a multiplexed TCP-based server that reads "\n"-terminated strings from clients and does something with them. Since this is one process with multiple client connections, it uses select() (or, actually, can_read from IO::Select) to block until data has arrived from any client.
It's my understanding that TCP does not preserve "message boundaries." That is, if a client writes: $sock->autoflush(1); print $sock "abel\n"; print $sock "baker\n"; print $sock "charlie\n"; ... there are no guarantees about what will be returned from the server's system buffer by sysread() when select() pops. It could be "a", or "abel\n", or "abel\nbak", etc. What I *want* is to block until an entire "\n"-terminated string [can that be referred to as a "line"?] can be retrieved from one of my clients. I'm sure I could work out the logic to maintain application-level buffers, but I suspect I would merely be reinventing the wheel, one bug at a time :-). What does the experienced Perl programmer - or socket-level programmer in general - do in this situation? VS -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/