C/Visual C - funcion send()

 
Vista:

funcion send()

Publicado por Rodrigo (2 intervenciones) el 13/08/2003 18:06:30
Quisiera saber cual es el numero maximo de bytes que se pueden enviar mediante la función send(). ya que deseo enviar una estructura demasiado grande pero al recivirla solamente se recive una parte de esta y tambien saber si hay forma de saber si no se enviaron todos los datos y si es asi seguir enviando los que faltaron
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:funcion send()

Publicado por chuidiang (677 intervenciones) el 14/08/2003 09:24:31
Entiendo que estas hablado de sockets.

No hay limite (el tamaño que te quepa en memoria), puedes enviar la estructura todo lo grande que quieras, pero tienes que leerla con varios read() o recv().

Me explico:

Hay un buffer interno de envio y recepcion de datos. Tiene un tamaño de varios Kbytes, pero puedes configurarlo con la funcion setsockopt(). La funcion getsockopt() te daría este tamaño (entre otros).

Cuando envias algo con send(), se mete en ese buffer. Si tu mensaje es mas grande que el buffer, send() se queda bloqueado hasta que se vacie dicho buffer (se envie realmente por la red) y se puedan seguir metiendo datos.

Por este motivo, tu mensaje va por la red "troceado". En el otro lado no lo puedes recibir con un solo read() (o recv()). En un read() el tamaño maximo que vas a recibir de un golpe es el tamaño del buffer. Para leer mensajes mas grandes, tienes que ir leyendo varios trozos y concatenarlos. La funcion read() o recv() devuelven el numero de bytes leidos. Debes comprobar si son los que esperas y si son menos, hacer otro nuevo read() o recv().

Otro temilla. Cuando envias muchos mensajes pequeños (mas pequeños que el buffer) con una cierta velocidad, es posible que envies mas rapido de lo que se vacia el buffer, por lo que es posible que un mensaje pequeño no quepa en el buffer y se envie también troceado. Es buena costumbre, por tanto, e independientemente del tamaño de los mensajes, asegurarse en los read() o recv() que se ha recibido el mensaje completo y, si no es asi, seguir leyendo los bytes que faltan.

En mi pagina web, dentro del ejemplo s
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar