From:             andrew at neonsurge dot com
Operating system: Gentoo, OS-X 10.4
PHP version:      5.2.1
PHP Bug Type:     Streams related
Bug description:  fsockopen() always forces a DNS resolution unnecessarily

Description:
------------
fsockopen() always asks your DNS server for the IP address 
of a connection before it opens it, instead of trying to 
look in the local cache first.  I believe this is unexpected 
and performance-wise is a very undesirable operation.  See 
reproduce code...

Reproduce code:
---------------
<?php for ($i = 0; $i < 50; $i++) {
        $errno = $errstr = "";
        //$ip = gethostbyname("php.net");  $a =
fsockopen($ip,22,$errno,$errstr,10);  //FAST way
        $a = fsockopen("php.net",22,$errno,$errstr,10); //SLOW way
        $ab = fread($a,4096); unset($a, $ab);
} ?>

Expected result:
----------------
While running the slower code above exactly as 
is, you can packet sniff and view 50 full requests for the 
domain php.net.  This is unoptimized and causes this code to 
run extremely slow.

When running with the fast way (change lines commented out) 
the above code runs a few hundred percent faster.  Upon a 
packet sniff you can watch 1 or two requests for php.net 
being sent to your DNS server which I believe is the desired 
result.

NOTE: In the code above I do have the workaround by 
connecting with the IP instead by using gethostbyname() 
first which appears to use the local DNS cache.

Actual result:
--------------
The code above should run exactly the same speed either way.  
fsockopen should be using the local machine's DNS cache and 
not have to query the DNS server upon every request when 
given a DNS name to connect to.

-- 
Edit bug report at http://bugs.php.net/?id=40427&edit=1
-- 
Try a CVS snapshot (PHP 4.4): 
http://bugs.php.net/fix.php?id=40427&r=trysnapshot44
Try a CVS snapshot (PHP 5.2): 
http://bugs.php.net/fix.php?id=40427&r=trysnapshot52
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=40427&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=40427&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=40427&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=40427&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=40427&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=40427&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=40427&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=40427&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=40427&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=40427&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=40427&r=globals
PHP 3 support discontinued:   http://bugs.php.net/fix.php?id=40427&r=php3
Daylight Savings:             http://bugs.php.net/fix.php?id=40427&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=40427&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=40427&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=40427&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=40427&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=40427&r=mysqlcfg

Reply via email to