Add ability to show login error from the IMAP server instead of traditional "Unknown...
[squirrelmail.git] / plugins / filters / bulkquery / README
CommitLineData
b1b8988d 1bulkquery - A program by Brent Bice - 02/2002
2
3 Bulkquery is a multi-threaded program that makes a large number of
4DNS queries as fast as possible. It's tailored for making DNS queries for
5specific IP addresses against specific DNS based RBLs.
6
7 "Why bother?"
598294a7 8I've been asked this several times. While running SquirrelMail on a server
b1b8988d 9with very little bandwidth and very high latency (a dial-up account - snicker)
10I noticed that while my filters plugin was making gethostbyname() function
11calls, my dial-up line was mostly idle. This was, apparently, because all
12the DNS function calls were being made in series. Once a DNS query had been
598294a7 13sent, no others were sent until a response had been received or until a
b1b8988d 14certain timeout period had occurred. And some of the RBLs were quite a
15bit faster than the others. This seemed pretty inefficient. "Why not make
16more DNS queries while waiting for the replies," I thought.
17
18 After several attempts to make a multi-threaded program to make the queries
19using the standard DNS library calls, I realized why. The library functions
20weren't thread-safe and most of the replies would be lost. Luckily, a
21friend of a friend told me about the lwres API in Bind 9.x and told me that
22IT was definitely thread-safe and very fast.
23
24 Boy was SHE right!
25
26 So, how much faster is it? It will depend on your bandwidth and the
27latency of your connection. But for those of us trying to make do with less,
28bulkquery is a LOT faster. On a dial-up connection, I can make queries
29anywhere from 6 to 10 times faster! On my T1 at work, the queries are
30usually between 2 and 7 times faster. The bottom line of all of this is
31that even on my T1 at work, the filters plugin can query ALL of the RBLs
32for all the new email in my INBOX in less than half the time it takes using
33the PHP gethostbyname() function calls.