#40427 [Opn->Bgs]: fsockopen() always forces a DNS resolution unnecessarily
| From: | tony2001@php.net | Date: | Sat, 10 Feb 2007 19:51:05 +0000 |
| Subject: | #40427 [Opn->Bgs]: fsockopen() always forces a DNS resolution unnecessarily | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-108681@lists.php.net to get a copy of this message | ||
ID: 40427
Updated by: tony2001@php.net
Reported By: andrew at neonsurge dot com
-Status: Open
+Status: Bogus
Bug Type: Streams related
Operating System: Gentoo, OS-X 10.4
PHP Version: 5.2.1
New Comment:
>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.
Believe me, fsockopen() knows nothing about DNS servers and local
caches.
Not PHP problem.
Previous Comments:
------------------------------------------------------------------------
[2007-02-10 02:33:25] andrew at neonsurge dot com
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 this bug report at http://bugs.php.net/?id=40427&edit=1