ID: 24756 User updated by: nalldrin at cs dot ucsd dot edu Reported By: nalldrin at cs dot ucsd dot edu -Status: Feedback +Status: Open Bug Type: Sockets related Operating System: Windows XP Pro PHP Version: 4.3.2 New Comment:
The problem isn't with fopen(); it's with fsockopen() which should be trying to create a raw tcp:// connection, not an http:// connection. The point of comparing fsockopen with fopen was to show that somehow fopen can tell that the port is closed while fsockopen cannot (since they both need a tcp:// connection). What I mean by "closed but not blocked" is a port that won't accept a tcp connection, but still sends out a reply to the connection attempt saying it's closed. A blocked port would pretend it didn't see the connection attempt at all. I'm probably muddling my terminology, but that's what I mean :). Previous Comments: ------------------------------------------------------------------------ [2003-07-23 00:54:48] [EMAIL PROTECTED] The http:// wrapper internally calls the same connection routines as fsockopen, so I can't see how it could be behaving differently (error messages aside). Can you explain what you mean by a closed-but-not-blocked port? ------------------------------------------------------------------------ [2003-07-22 15:36:52] nalldrin at cs dot ucsd dot edu Description: ------------ I'm running PHP 4.3.2 on Windows XP and think I've found a bug in fsockopen(). When attempting to open a closed, non-blocked port, fsockopen() times out instead of returning immediately. On linux, fsockopen() returns immediately instead of timing out. I've tried the latest CVS version (php4-win32-STABLE-200307211230) and get the same problem. Also perhaps relevant is the fact that fopen() seems to work correctly (ie, it does not time out like fsockopen). Note: I think this is the same problem as bugs 23131, 21193, etc., but the problem does not seem to be fixed. Here's some more info about the machine/php version I'm running: System: Microsoft Windows XP Professional Version 2002 Service Pack 1 Xeon 3.06GHz 512MB RAM PHP: <a href="http://louis.ucsd.edu/~nalldrin/phpbug/phpinfo.html>phpinfo</a> Reproduce code: --------------- <?php set_time_limit(0); $hostname = 'localhost'; //use any hostname:port combo that is closed, but not blocked $port = 81; $errno = null; $error_str = null; // FSOCKOPEN does not detect closed port and waits until timeout echo microtime() . "\n"; $fp = fsockopen( $hostname, $port, $errno, $error_str, 10); echo microtime(); echo "\nerrno: "; var_dump($errno); echo "error_str: "; var_dump($error_str); echo "retval: "; var_dump($fp); if ($fp !== false) fclose($fp); // FOPEN seems to correctly detect closed port and returns immediately echo microtime() . "\n"; $fp2 = fopen ("http://$hostname:$port", "r"); echo microtime(); if ($fp2 !== false) fclose($fp2); ?> Expected result: ---------------- The script should return immediately, saying the hostname/port is closed or something to that effect. Actual result: -------------- The fsockopen() call times out. .......................................... 0.98491200 1058903395 <br /> <b>Warning</b>: fsockopen(): php_hostconnect: connect failed in <b>c:\Inetpub\wwwroot\phpbug\fsockopenbug.php</b> on line <b>11</b><br /> <br /> <b>Warning</b>: fsockopen(): unable to connect to localhost:81 in <b>c:\Inetpub\wwwroot\phpbug\fsockopenbug.php</b> on line <b>11</b><br /> 0.98788000 1058903405 errno: int(10060) error_str: string(185) "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." retval: bool(false) 0.98791200 1058903405 <br /> <b>Warning</b>: fopen(): php_hostconnect: connect failed in <b>c:\Inetpub\wwwroot\phpbug\fsockopenbug.php</b> on line <b>22</b><br /> <br /> <b>Warning</b>: fopen(http://localhost:81): failed to open stream: Bad file descriptor in <b>c:\Inetpub\wwwroot\phpbug\fsockopenbug.php</b> on line <b>22</b><br /> 0.94688200 1058903406 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=24756&edit=1
