while(1) { my @ready = (); while(@ready = $sel->can_read(0)) { debug_out("while \$sel->can_read(1)") if $debug > 99; my ($new); foreach $client (@ready) { debug_out("foreach \$client") if $debug > 99; if($client == $server) { debug_out("client == server") if $debug > 99; $new = $server->accept(); $sel->add($new); } else { debug_out("client != server") if $debug > 99; $remote_ip = whos_there($client); debug_out("got remote IP") if $debug > 99; serv_out("Connect from $remote_ip"); $msg_total = 0; debug_out("reset msg total") if $debug > 99; while(<$client>) { debug_out("while <\$client>") if $debug > 99; $message = $_; debug_out("msg = '$message'") if $debug > 99; raw_out($message) if($config{'rawout'} == 1); # for logging: my $msg_length = length($message); debug_out("main: msg_length = $msg_length") if $debug > 5; next if $msg_length < 4; $msg_total++; debug_out("main: incr msg total to $msg_total") if $debug > 99; serv_out("Processing $msg_length bytes from $remote_ip\n"); # split the message into segments # we are splitting on carriage returns (NOT newline!) @segments = split /\015/, $message; debug_out("main: split msg into segments") if $debug > 99; # call a sub to loop over the segments process_segment(\@segments, $message, $client); debug_out("main: process segment returns") if $debug > 99; debug_out("main: refreshing logs") if $debug > 99; refresh_logs(); } # end while(<$client>); serv_out("Closing connection from $remote_ip"); } $sel->remove($client); debug_out("Client removed") if $debug > 99; $client->close(); debug_out("Client closed") if $debug > 99; $server = create_socket($config{'port'}); debug_out("server cycled") if $debug > 99; } } }