ID: 34851
Updated by: [EMAIL PROTECTED]
Reported By: khayll at motoros dot hu
Status: Open
Bug Type: Sockets related
Operating System: win 2k3 server
PHP Version: 4.4.0
New Comment:
Winsock implementation does not support all BSD options for setsockopt,
SO_RCVTIMEO is within these.
Previous Comments:
------------------------------------------------------------------------
[2005-10-13 18:18:23] khayll at motoros dot hu
Please read carefully what I wrote...
If I use 0 sec and 500 usec, the script HANGS when there's no response
(which means usec has NO EFFECT)! (Sorry I cannot reproduce remote
machine not sending a response, but accepting connections) and with a
setting of 1 sec 0 usec which is pretty much for a response I get a
timeout error.
here execute this script and it will show you the script execution time
is less than 1 sec at all giving a timeout:
<?php
echo microtime()."<br>\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>1,
"usec"=>0));
socket_connect($socket, "81.182.13.109", "502");
$pdu = "";
$pdu .= chr(0x03).chr(floor(16000 / 256)).chr(16000 %
256).chr(floor(10 / 256)).chr(10 % 256);
$rand = mt_rand(1,65535); //generate random adu id
$adu = "";
$adu .= chr(floor($rand / 256)).chr($rand %
256).chr(0).chr(0).chr(floor(6 / 256)).chr(6 % 256).chr(1);
$data = $adu.$pdu;
socket_write($socket, $data, strlen($data));
$result = socket_read($socket, 512, PHP_BINARY_READ);
if($result===false) echo
socket_strerror(socket_last_error())."<br>\n";
socket_shutdown($socket, 2);
socket_close($socket);
echo microtime()."<br>\n";
?>
result:
0.32968200 1129220264
Warning: socket_read() unable to read from socket [0]: A connection
attempt failed because the connected party did not properly respond
after a period of time, or established connection failed because
connected host has failed to respond. in
c:\data\web\rtu\rtu_web\phpbug.php on line 20
A connection attempt failed because the connected party did not
properly respond after a period of time, or established connection
failed because connected host has failed to respond.
0.89507800 1129220264
------------------------------------------------------------------------
[2005-10-13 17:52:57] [EMAIL PROTECTED]
Well, that's because USEC are *microseconds*, not milliseconds.
Try to use sec=0 usec=5000000 instead.
------------------------------------------------------------------------
[2005-10-13 17:52:20] khayll at motoros dot hu
sorry I forgot a line from the code:
I also decreased the sec param to 1 because for me the remote host is
quite fast.
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>1,
"usec"=>0));
socket_connect($socket, "81.182.13.109", "502");
$pdu = "";
$pdu .= chr(0x03).chr(floor(16000 / 256)).chr(16000 %
256).chr(floor(10 / 256)).chr(10 % 256);
$rand = mt_rand(1,65535); //generate random adu id
$adu = "";
$adu .= chr(floor($rand / 256)).chr($rand %
256).chr(0).chr(0).chr(floor(6 / 256)).chr(6 % 256).chr(1);
$data = $adu.$pdu;
socket_write($socket, $data, strlen($data));
$result = socket_read($socket, 512, PHP_BINARY_READ);
echo socket_strerror(socket_last_error());
socket_shutdown($socket, 2);
socket_close($socket);
?>
------------------------------------------------------------------------
[2005-10-13 17:41:05] khayll at motoros dot hu
And if I set sec=0 usec=500000 (or 5 for a shorter timeout) it hangs,
meaning to me, that usec has no effect.
------------------------------------------------------------------------
[2005-10-13 17:38:56] khayll at motoros dot hu
Actual: Script gives timeout error but it does not wait for 5 seconds
for the answer, as set in SO_RCVTIMEO.
Expeted: to wait max. 5 second for remote host to answer, but script
executes much faster. I tried to increase second to 500000 and then it
works ok.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/34851
--
Edit this bug report at http://bugs.php.net/?id=34851&edit=1