How to know when a payment has been received by bitcoind? I want to create a website which involves the creation of a new single-use address that a user would send bitcoins to. I'd like to know programmatically when the user has sent bitcoins to the address so the website can post a "thank you" note (or do whatever else). What is the best way to do this?

The flow would be:


Website creates and shows user a new single-use address and says, "send bitcoins here"
User sends bitcoins to the address
As soon as the address receives bitcoins, the website says "thank you for sending 0.3 BTC!"


I suppose I could poll the address in question every few minutes, but this is problematic because the user may abandon the website after step 1 (i.e., never send any bitcoins), so the website might end up polling forever.

I am using the official bitcoind client now, but I'm open to using something else.

I understand Blockchain.info provides an API to get push notifications on a given address activity, but I'd rather not rely on a third-party service.
Beginning with v0.6.0 of the Bitcoin.org client was -BlockNotify.  Beginning with v0.8.2 of the Bitcoin.org client was -WalletNotify which provides transaction-level notification.