in reply to read from socket blocks until buffer is full
You want sysread instead of read. read will read until the specified number of bytes has arrived. Say your header is 500 bytes long and there's no body (e.g. a GET request), read will wait for another 524 bytes more to come even though more won't come. sysread will return as soon as some bytes are available.
my $buf = ''; my $header; for (;;) { my $rv = sysread($sock, $buf, BLK_SIZE, length($buf)); die("Can't read: $!\n") if !defined($rv); die("Can't read: Premature EOF\n") if !$rv; if ($buf =~ s/^(.*\r\n\r\n)//s) { $header = $1; last; } }
Use the same technique to read the body. Don't forget that some of the body may already be in $buf.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: read from socket blocks until buffer is full
by Anonymous Monk on Feb 28, 2011 at 18:13 UTC |