#20397 [Opn]: UDP connections dont respect Timeouts on Reads

From: Date: Wed, 20 Nov 2002 13:59:23 +0000
Subject: #20397 [Opn]: UDP connections dont respect Timeouts on Reads
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-25340@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: Open Bug Type: Sockets related Operating System: linux PHP Version: 4.2.3 New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [2002-11-13 07:36:51] xf_vito@hotmail.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-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

« previous php.bugs (#25340) next »