shlist

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

commit 0a5ca7223f024e4fb07628273fffed152c543ac9
parent 2033589e4a13ff3cda23c266f0536d2686652041
Author: kyle <kyle@getaddrinfo.net>
Date:   Sat, 30 May 2015 02:42:14 -0400

sl: set socket to binmode, unpack integers properly

Diffstat:
Msl | 25+++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/sl b/sl @@ -80,24 +80,25 @@ while (my ($new_sock, $bin_addr) = $sock->accept()) { binmode($new_sock); - read $new_sock, my $msg_type, 1; + my $bread = read $new_sock, my $raw_msg_type, 2; + my ($msg_type) = unpack("n", $raw_msg_type); - my $msg_size_size = undef; - $msg_size_size = 1 if ($msg_type == 1); - $msg_size_size = 2 if ($msg_type == 2); - $msg_size_size = 1 if ($msg_type == 3); - $msg_size_size = 1 if ($msg_type == 4); + if (!defined $msg_type) { + print "warn: error unpacking msg_type\n"; + close $new_sock; + next; + } - unless (defined $msg_size_size) { - print "warn: unknown msg type " . printf "%x\n", $msg_type; + if ($msg_type > 5) { + print "warn: unknown msg type " . sprintf "%x\n", $msg_type; close $new_sock; next; } - print "info: msg size size = $msg_size_size\n"; - my $ascii_msg_type = sprintf("%x", $msg_type); - print "info: received msg type $ascii_msg_type\n"; + print "info: received msg type $msg_type\n"; + + read($new_sock, my $raw_msg_size, 2); + my ($msg_size) = unpack("n", $raw_msg_size); - read($new_sock, my $msg_size, $msg_size_size); if ($msg_size == 0) { print "warn: empty message received\n"; }