http://www.perlmonks.org?node_id=602627


in reply to Re^2: Problem with IO::Select
in thread Problem with IO::Select

You still aren't reading anything. length(undef) is certainly not greater than 0.

Also, $sock is not the right socket to be reading from anyway.

Replies are listed 'Best First'.
Re^4: Problem with IO::Select
by timos (Beadle) on Mar 01, 2007 at 00:46 UTC
    Ah, ok. So I changed it to
    my $rx_txt = "something"; while (length($rx_txt) > 0) { $conn->recv($rx_txt, 1024); $buff.=$rx_txt; }
    But the problem stays the same.
      You probably meant to write:
      while ($rh->recv($rx_txt, 1024) > 0) { $buff .= $rx_txt; }
      But that's not good code when using 'select'. That's only okay if you're only handling one connection at a time. If you're only handling one connection at a time, don't use select.

      Also, I hope you know that adding a file handle for "~/.somefile" only makes sense if it's a fifo (named pipe).

      There are actually a lot of problems with your code. You should probably look at something somebody else has written. I recommend The Perl Cookbook, although there are a lot of free examples scattered about the internet.

      "can_read" really means "trying to read won't block", which means that end-of-file will cause can_read to keep returning "true" forever. That might be your problem.

      You need to detect end-of-file and then (probably) close the socket and stop asking if you can read from it.

      - tye