Nice code.
But out of interest, what's wrong with DownloadURL API that I was using?
It does everything that the winsock does, but automatically. Also, it comes with other benefits, like caching the file.
So, you have to include 2 tlb files in your app...and? When dealing with large apps that are very complex then you will have many many many DLLs associated with your app. Some your have written yourself, and some that are 3rd party.
Splitting an app up into different components, whether that be internal classes, or DLL, benefits you and the development of the application.
There is no way everything should be placed in one exe. This makes for bad app design.

Woka