lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Re: Probem sending large files using LwIP


From: Louis Filasky
Subject: [lwip-users] Re: Probem sending large files using LwIP
Date: Wed, 18 Jul 2007 18:23:43 +0200

Hi,

Thanks for looking through my problem but I managed to find the cause. Actually, it's a rather stupid mistakes but I was so sure about the rightness of all the other functions
that I didn't see it. In the server_received function, when I create a struct connection_state* cs, I forgot to equalize cs and arg (cs=arg).
So, what was passed to processCommand and then sent was something totally unexpected.

I had done it and checked it in every other function except this one !

Anyway, I was just wondering, now it's sending all of my data, good start. On my client side, when I start sending such data which will be written into a file, there must be
a too long time between the two sets of data send to the client so it believes than it is another file and create a new file and writes over the former one.

Well, there is definitely something to fix on my client and I only see that solution, just like I can give to the client the size of the file to be sent and tell him to only write a file until that much data has been received. But I was wondering also if there was something that I haven't done to solve this solution on the server side:

void send_data(struct tcp_pcb *pcb, struct connection_state *cs)
{
  u16_t len;
  err_t err;
 
  /* We cannot send more data than space available in the send buffer.*/
  if(tcp_sndbuf(pcb) < (cs->left)) {
      len = tcp_sndbuf(pcb);
  }
  /* Otherwise, the length is equal to the size of the data to be sent */
  else {
     len = cs->left;
  }     
 
  err = tcp_write(pcb, cs->data, len, 1);
 
  /* Queue the data to be sent, if tcp_write does not send back ERR_OK, force the data transfer. */
  if(ERR_OK==err) {
      cs->data += len;
        cs->left -= len;
  }
  else if(err==ERR_MEM) {
      tcp_output(pcb);
  }
  /* If the data to be send is smaller than the send buffer size, then force the data transfer to speed it up. */
  if(cs->left == 0) {
      tcp_output(pcb);
  }
}

Thanks a lot for your help once again,

Louis.


Besoin d'un e-mail ? Créez gratuitement un compte Windows Live Hotmail et bénéficiez d'un filtre antivirus gratuit ! Windows Live Hotmail
reply via email to

[Prev in Thread] Current Thread [Next in Thread]