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.
In reply to Re: read from socket blocks until buffer is full
by ikegami
in thread read from socket blocks until buffer is full
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |