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