Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/12/2008, 12:54
Bb-7
 
Fecha de Ingreso: diciembre-2008
Ubicación: San Sebastián
Mensajes: 15
Antigüedad: 15 años, 4 meses
Puntos: 0
Pregunta ¿¿¿¿Memoria dinámica - recibir datos por un socket????

He leído muchos mensajes en éste mismo foro, sobre problemas con memoria dinámica, etc.
Cuando recibo datos de un servidor, utilizo la función recv() (winsock2.h) para recibir esos datos, y en uno de los parámetros de la función, tengo que dar un puntero en el que almacenar los datos que llegan. Pero no se me ocurre cómo puedo hacerlo, porque yo no sé de antemano cuál va a ser el tamaño de los datos que me enviará el servidor. Cuando descargo, un archivo de un FTP, por ejemplo, no sé el tamaño del archivo.
Y si asigno, por ejemplo, 2000 bytes de memoria, así:
puntero=(char *)malloc(2000);
Y luego me conecto a un FTP, y le digo que me envie un archivo, y voy guardando las partes del archivo en esa memoria, pero luego resulta que el archivo pesa 3000 bytes. ¿Qué pasaría, se provocaría un desbordamiento de buffer, no? Precisamente estoy trabajando en eso, en un programa que baje cierto archivo de un servidor FTP ó HTTP, entre otras cosas.
¿Cómo lo hago para bajar el archivo sin problemas, y usando suficiente memoria como para no provocar un overflow, pero no demasiada, para no desperdiciar memoria?
Estaría bien un código de ejemplo, pero da igual.
Gracias de antemano.