Esto son y así se usan los sockets BSD:
http://wiki.treck.com/Introduction_to_BSD_SocketsPor lo demás, descargar un archivo o página de una web, y guardarla en un fichero.
Para descargar de la web, necesitarás conocer el protocolo HTTP. Busca acerca de él, o mira algún ejemplo, como
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_messageTe toca trabajarlo. La complejidad de este problema en mi opinión se centra en:
-1: Controlar los sockets: abrirlos, enviar datos, recibir datos
-2: Controlar el protocolo HTTP: Pedir al servidor, recibir datos del servidor
-3: Los datos recibidos del servidor, tendrán que ser separados entre cabecera y cuerpo. Lo que pondrás en el archivo, es el cuerpo, así que separarlos correctament ees esencial.
Como datos en los que fijarte del protocolo HTTP, decir que el campo "content-length" de la cabecera, te dice el tamaño del cuerpo en bytes, y que el cuerpo comienza a partir de 2 saltos de linea contiguos ("\r\n\r\n").
Si tienes más problemas, comenta.