in reply to websocket infinit loop

While you have told us what you have "done", you have neglected to tell us what has then happened.

have you seen that the script progresses past # Here the script and server will exchange information few times ? What happens inside dosomething() and dosomething2(); There are people that will tell you not to use &sub to call a subroutine because of what happens to the parms list but i am sortof concerned that neither has any parms that you supply. i would expect then that they would start with something like my $buf; my $rv = sysread($net, $buf, 64*1024, length($buf)); and my $buf; my $rv = sysread($server, $buf, 64*1024, length($buf)); Since i dont see any use warnings; use strict; i expect you are assuming that $net and $server are globals and are available to those subs

also after the $rv=sysread you should have some sort of test like

if (!$rv) { if (defined($rv)) { # eof state, remove from io::select; } else { # error state, remove from io::select; } } else { # process $buf; }

I should also point out that 0.05 is rather short for the timeout, since can_read will block until it has something you can read. with the very short timeout while(1) will loop with nothing to do a LOT