#34851 [Opn]: SO_RECVTIMEO sec stands for usec!!!! and usec has no effect!

2005-10-14 Thread mike
 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=500 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=50 (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 50 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=34851edit=1


#34851 [Opn]: SO_RECVTIMEO sec stands for usec!!!! and usec has no effect!

2005-10-14 Thread mike
 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:

But I cannot reproduce either, here's what I receive (base64),
without warnings (on Win2k):

PHP-4.3.8: UukXAQMUcmV2LjIuMiAgIgFQMUVSSyA=
PHP-5-CVS: /AoXAQMUcmV2LjIuMiAgIgFQMUVSSyA=



Previous Comments:


[2005-10-14 14:36:03] [EMAIL PROTECTED]

Winsock implementation does not support all BSD options for setsockopt,
SO_RCVTIMEO is within these.






[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=500 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=50 (or 5 for a shorter timeout) it hangs,
meaning to me, that usec has no effect.



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=34851edit=1


#34851 [Opn]: SO_RECVTIMEO sec stands for usec!!!! and usec has no effect!

2005-10-14 Thread mike
 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:

Ok, ok, my last comment :)

The real problem seems to be that windows expects a DWORD and not a
timeval as parameter.



Previous Comments:


[2005-10-14 15:08:03] [EMAIL PROTECTED]

But I cannot reproduce either, here's what I receive (base64),
without warnings (on Win2k):

PHP-4.3.8: UukXAQMUcmV2LjIuMiAgIgFQMUVSSyA=
PHP-5-CVS: /AoXAQMUcmV2LjIuMiAgIgFQMUVSSyA=




[2005-10-14 14:36:03] [EMAIL PROTECTED]

Winsock implementation does not support all BSD options for setsockopt,
SO_RCVTIMEO is within these.






[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=500 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);

?



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=34851edit=1


#34851 [Opn]: SO_RECVTIMEO sec stands for usec!!!! and usec has no effect!

2005-10-13 Thread khayll at motoros dot hu
 ID:   34851
 User updated by:  khayll at motoros dot hu
 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:

And if I set sec=0 usec=50 (or 5 for a shorter timeout) it hangs,
meaning to me, that usec has no effect.


Previous Comments:


[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 50 and then it
works ok.



[2005-10-13 16:16:23] [EMAIL PROTECTED]

And actual/expected results please?



[2005-10-13 14:36:01] khayll at motoros dot hu

?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(sec=5,
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);

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 12:31:30] [EMAIL PROTECTED]

Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with ?php and ends with ?,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc.

If possible, make the script source available online and provide
an URL to it here. Try to avoid embedding huge scripts into the report.





[2005-10-13 11:38:15] khayll at motoros dot hu

Description:

I tried to set a receive timeout for a socket, but found out that sec
is used as usec, and usec is in fact ignored!


Reproduce code:
---
using a modbus device  with address address, sorry i cannot make it
available on the net

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(sec=0,
usec=500));
socket_connect($socket, address, 502);
socket_write($this-socket, $data, strlen($data));
socket_read($this-socket, 512, PHP_BINARY_READ);



Expected result:

expected to read some data or give a timeout error.


Actual result:
--
code hangs, so i figured out, that usec has no effect, then i tried 1
sec as timeout, code began to work, but kept reporting timeout, so i
figured out if i try a value like 50 as sec it works. Seems like
sec is used as usec, and usec has no effect.






-- 
Edit this bug report at http://bugs.php.net/?id=34851edit=1


#34851 [Opn]: SO_RECVTIMEO sec stands for usec!!!! and usec has no effect!

2005-10-13 Thread khayll at motoros dot hu
 ID:   34851
 User updated by:  khayll at motoros dot hu
 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:

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);

?


Previous Comments:


[2005-10-13 17:41:05] khayll at motoros dot hu

And if I set sec=0 usec=50 (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 50 and then it
works ok.



[2005-10-13 16:16:23] [EMAIL PROTECTED]

And actual/expected results please?



[2005-10-13 14:36:01] khayll at motoros dot hu

?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(sec=5,
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);

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 12:31:30] [EMAIL PROTECTED]

Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with ?php and ends with ?,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc.

If possible, make the script source available online and provide
an URL to it here. Try to avoid embedding huge scripts into the report.





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=34851edit=1