in reply to Re: select appears to ignore pending data on socket.
in thread select appears to ignore pending data on socket.

i have just tried using recv to read the data in from the socket and got exactly the same results. i am sure it is a problem with the select call somewhere. it is just not triggering from the data pending on the socket.

i fail to understand why select would simply ignore pending data.

  • Comment on Re^2: select appears to ignore pending data on socket.

Replies are listed 'Best First'.
Re^3: select appears to ignore pending data on socket.
by Joost (Canon) on Nov 03, 2007 at 21:04 UTC

      i beleive i have found the bug......

      in the following section of code:-

      #create new client socket object sub create_new_client_sock { #create socket my $sock = IO::Socket::INET->new( PeerAddr => $conf_file->{server}, PeerPort => $conf_file->{port}, Blocking => 0, ); #check if socket exists if (!($sock)) { die "could not establish socket to " . $conf_file->{server} . +":" . $conf_file->{port} . "\n"; } #return socker object reference return $sock; }

      it would appear that if i set the socket to non-blocking, the script fails with the symptoms described. but if i set it to blocking, then it works perfectly...

      i am mystified as to why, and to be frank, right now i am past caring, it has taken me all day to figure this out, including three different writes (using a while loop, event module and select).

      thankyou for your patience and your help, but i think i am going to call it a day for now and try and figure out what i did wrong in the morning.

      the whole script and the configuration file

      well, for a moment i thought i had it working..... but it would appear i dont.

      it would appear that the select can_read only triggers when a new packet is received, not when there is data in the socket buffer, and for some reason i am not emptying the sockets entire buffer.