index 7f571a31e89f69683fca82566f2a72d90231bef5..c082f4748821896eae03e8232dd6ddc278d7d326 100644 (file)
return $this->b_data_send;
}
+
+ private function _is_timeout($start,$stop = 0)
+ {
+ if($stop == 0){
+ $stop = microtime();
+ }
+ $a = split("\ ",$start);
+ $b = split("\ ",$stop);
+ $secs = $b[1] - $a[1];
+ $msecs= $b[0] - $a[0];
+ $ret = (float) ($secs+ $msecs);
+ return($ret >= $this->timeout);
+ }
+
public function read()
{
- $str = FALSE;
- if($this->handle){
-
- /* Check if there is something to read for us */
- $read = array("0"=>$this->handle);
- $write = array();
- $accept = array();
- $start = microtime();
- $num = @stream_select($read,$write,$accept,floor($this->timeout), ceil($this->timeout*100000));
- $str = "";
- socket_set_timeout($this->handle,$this->timeout);
-
- /* Read data if necessary */
- while($num && get_MicroTimeDiff($start,microtime()) < $this->timeout){
- $str.= fread($this->handle, 100);
- $read = array("0"=>$this->handle);
- $num = @stream_select($read,$write,$accept,floor($this->timeout), ceil($this->timeout*100000));
+ // Output the request results
+ $str = "";
+ $data = "test";
+ socket_set_timeout($this->handle,$this->timeout);
+ stream_set_blocking($this->handle,0);
+ $start = microtime();
+
+ while(strlen($str) == 0 || !$this->_is_timeout($start)) {
+ usleep(10000);
+ $data = fread($this->handle, 1024000);
+ if($data && strlen($data)>0) {
+ $str .= $data;
+ } else {
+ break;
}
- $this->bytes_read = strlen($str);
- $this->b_data_send = FALSE;
- $str = $this->decrypt($str);
}
- return $str;
+ if($this->_is_timeout($start)){
+ trigger_error(sprintf("Exceeded timeout %f while reading from socket",$this->timeout));
+ }
+ $this->bytes_read = strlen($str);
+ $this->b_data_send = FALSE;
+ $str = $this->decrypt($str);
+ return($str);
}
}
/* Terminate decryption handle and close module */
- mcrypt_generic_deinit($this->td);
+ @mcrypt_generic_deinit($this->td);
}
}
?>