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:
M | sl | | | 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";
}