Bug #16261 Updated: fsockopen() does not allow milisecond timeouts
| From: | jason@php.net | Date: | Tue, 23 Jul 2002 20:49:48 +0000 |
| Subject: | Bug #16261 Updated: fsockopen() does not allow milisecond timeouts | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-14949@lists.php.net to get a copy of this message | ||
ID: 16261
Updated by: jason@php.net
Reported By: jroberts@forumone.com
-Status: Open
+Status: Closed
Bug Type: Sockets related
Operating System: Linux
PHP Version: 4.3-dev
New Comment:
This bug has been fixed in CVS. You can grab a snapshot of the
CVS version at http://snaps.php.net/. In case this was a
documentation
problem, the fix will show up soon at http://www.php.net/manual/.
In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites.
Thank you for the report, and for helping us make PHP better.
fsockopen now behaives as specified.
As far as the DNS queries go, there is no way to currently achieve that
behavior on all platforms. I would recommend using gethostbyname, and
passing the ip directly to fsockopen, this will cause you to take the
dns hit once.
-Jason
Previous Comments:
------------------------------------------------------------------------
[2002-07-15 12:34:45] jroberts@forumone.com
Thanks Jason. Would it be possible/desireable to include the time for
DNS lookup in the timeout period? I'm using sockets to request headers
for remote files (PDF, etc.) to display size/type in a distributed
library. In cases where I'm showing 10-20 files per page, a delay of
more than 0.5 seconds or so each is major problem -- regardless of
whether it's caused by DNS lookup or response from the actual server.
In those cases I'd rather just show a "filesize unknown" message rather
than waiting an indeterminate amount of time for the content-length
header.
------------------------------------------------------------------------
[2002-07-15 09:46:48] jason@php.net
This behavior does not actually exist in the version you report. The
test domain you are using is slow on the DNS lookup, which does not
count against the timeout.
The current development branch does not allow subsecond timeouts, and
as such I am modifying this bug to apply.
-Jason
------------------------------------------------------------------------
[2002-03-25 09:58:52] jroberts@forumone.com
BTW, socket_set_timeout is working fine for me after the socket has
been opened. It's the failure to timeout on the actual fsockopen()
that is causing issues.
------------------------------------------------------------------------
[2002-03-25 09:55:46] jroberts@forumone.com
I'm specifying a timeout of 0.2 seconds, but the fsockopen() function
is taking as long as 3-4 seconds with slow domains (I know
www.krasnapolsky.sr to be slow). This example took about 3.6 seconds.
CODE:
echo microtime();
echo fsockopen("www.krasnapolsky.sr", 80, &$errno, &$errstr, 0.2);
echo microtime();
echo "Error Number = $errno, Error String = $errstr";
RESULT:
0.39859300 1016822517
Resource id #1
0.04482100 1016822521
Error Number = 0, Error String =
So the socket is opened -- it just took way longer than I intended to
allow it. Setting the timeout to an integer (e.g. 1) does not work
either (although the documentation says it can be of type float).
I reported this previously under bug 14740, but that thread was related
to win 98 and 2k, where the timeout is not expected to work.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=16261&edit=1