It is all clear now, Stefan. Thanks for your thorough answer. Amadeo
On 12/07/2011 02:10 AM, Stefan Kalkowski wrote: > Hello Amadeo, > > On 07.12.2011 03:20, Amadeo Casas Cuadrado wrote: >> Hello, >> >> Question about the lwIP port to Genode. Is it possible to receive a >> large amount of data with lwip_recv()? A quick test shows me the maximum >> amount of data that is received is 1460 bytes (properly matching TCP_MSS >> in lwipopts.h). What if I am expecting a larger amount of data? Do I >> need to perform the defragmentation explicitly in my program? > > Yes you're right. In general, when using LwIP receive operations it's > impossible to be blocked until the whole provided buffer is filled. You > can find a related section in the LwIP documentation: > > http://lwip.wikia.com/wiki/Receiving_data_with_LWIP > > "... LWIP may choose to return a fewer number of bytes for a variety of > reasons. This is true even if you do a blocking receive operation. There > is no option to make lwip_recv() block until a certain minimum number of > bytes have been received. ..." > > In fact, the Genode-specific part of the LwIP stack mainly is the > ethernet-driver implementation. This driver executes a designated > receiver-thread, which blocks on Genode's NIC-session interface. > Whenever, a new packet from the NIC is on-line, this thread puts it into > the higher layers of LwIP which is platform-independent code. The driver > can't accumulate packets, as it has no knowledge how much data the > application is going to receive. It would block an application endlessly > in the worst case. The only layer, where this accumulation can be done > is the socket-layer, or the application itself. > > But, this policy isn't particular to the LwIP stack. The glibc of my > Linux system works similar. It doesn't block until all data is received. > An excerpt from the man page: > > "... The receive calls normally return any data available, up to the > requested amount, rather than waiting for receipt of the full amount > requested. ..." > > Nevertheless, if for some reason you definitely need this hard-blocking > behaviour, you can wrap the 'lwip_' socket functions, and implement an > adequate loop in the 'recv()' wrapper. You can have a look at our > libc-lwip plugin in 'libports/src/lib/libc_lwip/plugin.cc'. Here we > already wrapped LwIP's socket-layer to integrate LwIP' functionality > conveniently in our libc. You can simply extend the recv() function in > there. > >> >> My apologies beforehand for posting to this list if this is a limitation >> of lwIP stack, and not of its port to Genode. > > No matter. > > Regards > Stefan > >> >> Thanks, >> Amadeo >> >> ------------------------------------------------------------------------------ >> Cloud Services Checklist: Pricing and Packaging Optimization >> This white paper is intended to serve as a reference, checklist and point of >> discussion for anyone considering optimizing the pricing and packaging model >> of a cloud services business. Read Now! >> http://www.accelacomm.com/jaw/sfnl/114/51491232/ >> _______________________________________________ >> Genode-main mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/genode-main >> > ------------------------------------------------------------------------------ Cloud Services Checklist: Pricing and Packaging Optimization This white paper is intended to serve as a reference, checklist and point of discussion for anyone considering optimizing the pricing and packaging model of a cloud services business. Read Now! http://www.accelacomm.com/jaw/sfnl/114/51491232/ _______________________________________________ Genode-main mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/genode-main
