php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #20397 UDP connections dont respect Timeouts on Reads
Submitted: 2002-11-12 11:33 UTC Modified: 2002-12-01 16:34 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: xf_vito at hotmail dot com Assigned:
Status: No Feedback Package: Sockets related
PHP Version: 4.2.3 OS: linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: xf_vito at hotmail dot com
New email:
PHP Version: OS:

 

 [2002-11-12 11:33 UTC] xf_vito at hotmail dot com
I create a udp connection using fsockopen and before all my reads I set a socket timeout.  The timeouts are never respected, because if this situation arises, I time out with FATAL ERROR: timed out greater than 30 sec msg from the server.  

I want to be able to catch this before reaching the FATAL ERROR.

The behaviour can be seen at our website http://www.xtreme-forces.com  Click on the SERVERS button to see the page in action.  60% of the time it works great rest it will Fatal, hit the Refresh to cause the error to occur quicker.
I can make the code available upon request.
thanks
Vito

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-11-12 13:44 UTC] iliaa@php.net
How are you setting the timeout value? The timeout value specified as the 5th argument to fsockopen() is only the timeout for the connection initiation. The read/write timeouts should be set via the stream_set_timeout() (CVS) or set_socket_timeout() in older versions.
 [2002-11-13 07:36 UTC] xf_vito at hotmail dot com
Here is a snippet of the code, I tried set_socket_timeout it didnt work.  this is using socket_set_timeout and it doesnt work either.
  function getrules()
   {
    $address="udp://".$this->ip;
    $this->socket=fsockopen($address,$this->port,$this->errno,$this->errstr,5);
    if(!$this->socket)
     {
      exit();
     }

    set_socket_blocking($this->socket, FALSE);
    $outstring="????rules";
    fwrite($this->socket,$outstring);
    $inbyte=$this->waitstart();
    $this->rules[firstchunk]=$inbyte . fread($this->socket,3);
    $this->rules[rulesbyte]=$this->getchar();
    $this->rules[number]=$this->getint();
    for($loop=0;$loop<$this->rules[number];$loop++)
     {
		$this->rules[rules][$loop][name]=$this->getstring();
	      $this->rules[rules][$loop][value]=$this->getstring();
	//$rulename=getstring;
      //$ruleval=getstring;
      //$this->rules[rules][$loop][name]=$rulename;
      //$this->rules[rules][$loop][value]=$ruleval;
     }

    fclose($this->socket);
    return;
   }

  function waitstart()
   {
    socket_set_timeout($this->socket, 0, 500);
    $inbyte=fread($this->socket,1);
    while($inbyte=="")
     {
	  socket_set_timeout($this->socket, 0, 500);
      $inbyte=fread($this->socket,1);
     }
    return $inbyte;
   }
  function getstring()
   {
   socket_set_timeout($this->socket, 0, 500);
    $inbyte=fread($this->socket,1);
    while($inbyte != "\0")
     {
      $string.=$inbyte;
	  socket_set_timeout($this->socket, 0, 500);
      $inbyte=fread($this->socket,1);
     }
    return $string;
   }
 [2002-11-20 07:59 UTC] xf_vito at hotmail dot com
seems the problem is with fread and socket timeout changed to fgetc and all is well works the way it should
but fread and udp and socket timeout has some problem.
 [2002-11-20 10:05 UTC] wez@php.net
Can you clarify what the problem is?
And can you trim down the code to something small, preferably using some standard service so that we can reproduce it here?

$fp = fsockopen(...)
fwrite($fp, "foo");
$data = fread($fp, 1);

Tell us what you expect to happen, and what does actually
happen.  Is PHP returning too soon, waiting too long?

UDP is a connectionless protocol, so you have to write your scripts to take that fact into account.
Also, please only test with a PHP 4.3 RC as this is where any fix would be made (4.2 is very old code compared to 4.3).



 [2002-12-01 16:34 UTC] sniper@php.net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.


 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Mon Dec 06 21:03:34 2021 UTC