sub read_incoming { while (defined sysread $_[0],$header,9,0) # Get header for the correct body length to call next; { if($header =~ m/([A-Z]{4})0+(\d{5})/) { my $messagetype = $1; sysread $_[0],$body,$2,0;#receive ng } } } sub write_outgoing { if(defined(my $line = shift(@g_queue))) { syswrite $_[0] ,$line; } } while(1) { ($r_ready, $w_ready) = IO::Select->select($read_set, $write_set, undef, $timeout); foreach my $rhandle (@$r_ready) #handle reads { read_incoming $rhandle; } foreach my $whandle(@$w_ready) #handle writes { write_outgoing $whandle; } }