shlist

share and manage lists between multiple people
Log | Files | Refs

commit 2d97f8a96a33c9462ed79a2cd8a1aded799bd77d
parent e4197ef15923b45596b6f1d719310633334199c3
Author: kyle <kyle@getaddrinfo.net>
Date:   Sun,  3 Jan 2016 16:39:58 -0500

sl: retry reading when too few bytes are sent

Diffstat:
Mserver/sl | 27+++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/server/sl b/server/sl @@ -137,19 +137,22 @@ sub recv_msg { } sub read_all { - my ($sock, $bytes_total) = @_; - - my $bytes_read = $sock->sysread(my $data, $bytes_total); + my ($sock, $bytes_left) = @_; + + my $data; + while ($bytes_left > 0) { + my $bytes_read = $sock->sysread(my $tmp, $bytes_left); + + if (!defined $bytes_read) { + log_print("error: read failed: $!\n"); + exit 0; + } elsif ($bytes_read == 0) { + log_print("disconnected!\n"); + exit 0; + } - if (!defined $bytes_read) { - log_print("error: read failed: $!\n"); - exit 0; - } elsif ($bytes_read == 0) { - log_print("disconnected!\n"); - exit 0; - } elsif ($bytes_read != $bytes_total) { - log_print("error: read $bytes_read instead of $bytes_total bytes\n"); - exit 0; + $data .= $tmp; + $bytes_left -= $bytes_read; } return $data;