Hmm, may be it reports blocking when it's not. What if you replace the whole blocking testing/setting conditional block, with just unconditional:
$socket->opt_set(APR::SO_NONBLOCK => 0);
I have tried this and it makes no difference -- it looks like non
blocking mode is simply not being set.
And this verification code doesn't fail?
# test that we really *are* in the blocking mode !$socket->opt_get(APR::SO_NONBLOCK) or die "failed to set blocking mode";
I'm going to examine the diffs between Apache 2.0.49 and .50; this code worked properly on .49. I have a suspicion that something they did broke the OpenBSD build.
I think it's this change that introduced this "feature":
*) SECURITY: CAN-2004-0493 (cve.mitre.org) Close a denial of service vulnerability identified by Georgi Guninski which could lead to memory exhaustion with certain input data. [Jeff Trawick]
So you don't need to check all the differences. I think apr was affected as well.
In fact APR is broken as it ignores the APR::BLOCK_READ flag in filters. But nobody at httpd-dev/apr-dev seems to even care :( So filter writers need to manually set the socket to the blocking mode, which sucks :(
-- __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
-- Report problems: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html List etiquette: http://perl.apache.org/maillist/email-etiquette.html