in reply to Re: Checking if a socket has some data to read
in thread Checking if a socket has some data to read

Thanks Scott, for the script. but I seem to be doing it the same way, for I always get undef from can_read() even if there is some data available on the wire.
  • Comment on Re^2: Checking if a socket has some data to read

Replies are listed 'Best First'.
Re^3: Checking if a socket has some data to read
by 5mi11er (Deacon) on Jun 14, 2013 at 16:16 UTC
    Hmm, no, I think you're confusing can_read with the routine that actually does the reading, you're confusing a scalar variable with an array, and I can't tell if you've turned buffering off on the $lsn file handle, but I'm guessing not.

    Your code:

    $results = $sel->can_read(0);# or die "cant read"; #print Dumper @results; print "\n****Outside if****"; print "results== $results\n";

    Ping code:

    if ( $select -> can_read( 0 ) ) { my $remote = recv ( $pinger, $buff, SIZE, RCV_FLAGS ); if ( $debug ) { print "result from ", unpack("C*",$remote), ":", unpack ( "C*", $target_addr), "\n"; } # sometimes ICMP replies come from other devices, filter those out if ( $remote eq $target_addr ) { $received++; } }

    So, you've, at best, got a boolean result from the can_read, but then you use that as if can_read returned an array of data from the wire, rather than use a recv() call to actually read the data properly.

    I'm also betting that you're Suffering from Buffering, which means unless you've tested by sending tons of stuff, the buffer never filled up, and it *LOOKS* like you've not received anything.

    -Scott

      Thank you Scott and my apologies for the late reply. I will read this today or next week and try to implement your suggestions. You may be right I may be suffering from buffering. Receiving some data is the only piece not working in my script and stopping it from becoming, what I want. I will get back to you. Kind regards. Cheers!
      God bless world peace...
        Hi Scott, I don't think my script is suffering from buffering. I think some issue with the CPAN library. I used IPC and created a child process, but for some reason the parent's request (heartbeat) isn't sent to the server, I think the child's read request is blocking the call. Which as per CPAN-SMPP library is expected. While child gets different offset, surprisingly it is an issue sometimes, not always. I'm thinking of emailing the module developer. Thanks a bunch.
        God bless world peace...