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: "UukAAAAXAQMUcmV2LjIuMiAgIAAAAgFQMUVSSyA="
PHP-5-CVS: "/AoAAAAXAQMUcmV2LjIuMiAgIAAAAgFQMUVSSyA="


------------------------------------------------------------------------

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

?>

------------------------------------------------------------------------

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

Reply via email to