On Wed, 2012-07-18 at 17:59 +0200, Eugen Dedu wrote: > Any idea? > > On 17/07/12 11:27, Eugen Dedu wrote: > > Hi all, > > > > I looked on Internet and at the old thread > > http://lkml.indiana.edu/hypermail/linux/kernel/0108.0/0275.html, but the > > issue is still not settled as far as I see. > > > > I need to have the highest memory available for snd/rcv buffer and I > > need to know/confirm how much it allocated for my process (how much I > > can use). > > > > So with Linux we need to do something like: > > setsockopt (..., SO_RCVBUF, 256000, ...) > > getsockopt (..., SO_RCVBUF, &i, ...) > > i /= 2; > > > > where i is the size I am looking for. > > > > Now, to make this code work for other OSes it should be changed to: > > setsockopt (..., SO_RCVBUF, 256000, ...) > > getsockopt (..., SO_RCVBUF, &i, ...) > > #ifdef LINUX > > i /= 2; > > #endif > > > > First question, is this code correct? If not, what code gives the amount > > of memory useable for my process? > > > > Second, it seems to me that linux is definitely "non-standard" here. > > Saying that linux uses twice as memory has nothing to do with that, > > since getsockopt should return what the application can count on, not > > what is the internal use. It is like a hypothetical malloc (10) would > > return not 10, but 20 (including meta-information). Is that right? > > > > Cheers,
That the way it's done on linux since day 0 You can probably find a lot of pages on the web explaining the rationale. If your application handles UDP frames, what SO_RCVBUF should count ? If its the amount of payload bytes, you could have a pathological situation where an attacker sends 1-byte UDP frames fast enough and could consume a lot of kernel memory. Each frame consumes a fair amount of kernel memory (between 512 bytes and 8 Kbytes depending on the driver). So linux says : If user expect to receive XXXX bytes, set a limit of _kernel_ memory used to store these bytes, and use an estimation of 100% of overhead. That is : allow 2*XXXX bytes to be allocated for socket receive buffers. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/