#20397 [Fbk->Opn]: UDP connections dont respect Timeouts on Reads
| From: | xf_vito at hotmail dot com | Date: | Wed, 13 Nov 2002 13:36:51 +0000 |
| Subject: | #20397 [Fbk->Opn]: UDP connections dont respect Timeouts on Reads | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-24800@lists.php.net to get a copy of this message | ||
ID: 20397
User updated by: xf_vito@hotmail.com
Reported By: xf_vito@hotmail.com
-Status: Feedback
+Status: Open
Bug Type: Sockets related
Operating System: linux
PHP Version: 4.2.3
New Comment:
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;
}
Previous Comments:
------------------------------------------------------------------------
[2002-11-12 13:44:27] 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-12 11:33:34] xf_vito@hotmail.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
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20397&edit=1