Il 01/08/2014 23:46, Sergio R. Caprile ha scritto: > Not really. > tcp_write() allocates an internal pbuf itself, but you can only send 3 > times in a row if yu have enough memory, and as TCP works, there is no > concept of packet and no need to call 3 times in a row. I mean a different thing. I said that also if I could send 3 packets calling 3 times tcp_write() there is no reason to send a message inside the sent callback because it could only resend the last message sent but.... if the callback is entered means that the packet was sent. Of course sending only 1 message (I mean calling tcp_write() only 1 time) there is really no reason to provide the possibility to send hte same packet another time. > You have a > sndbuf and you can send as much as you can fit inside that sndbuf for > that pcb. Once your buf is filled, you can only send again once data has > been sent out, acknowledged by the receiver, and so that buffer freed, > and that is signalled to you via the tcp_sent() callback. Yes, the problem is that for me the pcb is not freed. It contains valid data, exactly the last data sent and also the pbuf pointer is not null. > The whole point of calling echo_send() from inside the callback function > is that in this case the total amount of data actually sent might not > equal the amount of data received (in the whole pbuf). I made a test running all night... it sent more then 200000 messages and received always the reply in a single message, same behavior for the messages sent. > The first call to > tcp_write() sends only the first pbuf in the pbuf chain, and once this > is acked, the tcp_sent() callback will try to send the remaining pbufs > in the chain. If I correctly understand the code a tcp_write will try to put all data of a single tcp_write() in a single pcb also if I found some documentation saying that it could fit the message in more then 1 pcb so it will fit in a pcb chain. May you know what is the maximum data size in a pcb? In my case I am sure it will fit always in a pcb because the message is shorter then 50 bytes. > A pbuf may be a chain of pbufs, linked by p->next > > Either you have some memory problems or I've been lucky enough to get > whole data inside a single pbuf and didn't trigger the possible bug. I > recall sending small packets, what are you sending ? Sure, the memory problem is that the tcp_write() pcb seems to be not deallocated and also its pointer is not null, so may be more a problem related to pbuf_free(). It is correctly called after tcp_write() so it frees the user pcb, then tcp_write() should copy the data in a new pcb that will be used by tcp_output() (and sent). The pcb that is not free is the pcb used by tcp_write to send the message, I shouldn't have any control on it. My message is sprintf(szEchoMsg, "Raw message %d\n", iCount); and szEchoMsg is 50 bytes length. The echo server triggers on \n so echoes line by line. > Again, I suggest > you use netio for big chunks of data. > I don't have the time to build a short tcp_mss version of my linux port > and try it, maybe on monday. I suggest you (besides going for netio) try > with small messages, I'm sure those work OK. If they do, then check the > pbuf chains, if they don't... check your port. I suppose that I found something like a bug because all other examples (also netio) work well with no problems. I started with tcp_echo raw example because until now I designed server applications using lwip but this time I have to write a tcp client application. Because it wasn't working I tried the ping example and it worked perfectly.
Take care that my mcu is working at 120MHz, my system tick is 1 ms and the timed functions are called every 250ms (I tryed also at 125ms with no difference). Now my application seems to be working but I would test it with messages divided on several pcbs to be sure it really works well. Also in my application I didn't provide to send pcbs inside the sent callback function. Kind regards. > > Regards > logo * Massimo Manca*/, Micron Engineering/ via della Ferriera, 48 33170 Pordenone PN ITALIA Tel: 39 0434 1856131| Mobile: 39 349 4504979 www.micronengineering.it Twitter <http://s.wisestamp.com/links?url=https%3A%2F%2Ftwitter.com%2Fmassimomanca> LinkedIn <http://s.wisestamp.com/links?url=http%3A%2F%2Fit.linkedin.com%2Fpub%2Fmassimo-manca%2F7%2Fa15%2F479%2F> SlideShare <http://s.wisestamp.com/links?url=http%3A%2F%2Fwww.slideshare.net%2Fmicronpn> Contact me: Skype micron.engineering Designed with WiseStamp - <http://s.wisestamp.com/links?url=http%3A%2F%2Fr1.wisestamp.com%2Fr%2Flanding%3Fu%3Daaa0e17b0c4ca423%26v%3D3.13.31%26t%3D1406929657462%26promo%3D10%26dest%3Dhttp%253A%252F%252Fwww.wisestamp.com%252Femail-install%253Futm_source%253Dextension%2526utm_medium%253Demail%2526utm_campaign%253Dpromo_10>Get yours <http://s.wisestamp.com/links?url=http%3A%2F%2Fr1.wisestamp.com%2Fr%2Flanding%3Fu%3Daaa0e17b0c4ca423%26v%3D3.13.31%26t%3D1406929657462%26promo%3D10%26dest%3Dhttp%253A%252F%252Fwww.wisestamp.com%252Femail-install%253Futm_source%253Dextension%2526utm_medium%253Demail%2526utm_campaign%253Dpromo_10> --- Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus. http://www.avast.com
<<attachment: m_manca.vcf>>
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users