O Linux documenta o tamanho do buffer padrão para tcp, mas não para soquetes AF_UNIX ("local"). O valor pode ser lido (ou escrito) em tempo de execução.
cat /proc/sys/net/core/[rw]mem_default
Esse valor é sempre definido da mesma forma em diferentes kernels do Linux ou há uma variedade de valores possíveis?
O padrão não é configurável, mas é diferente entre Linux de 32 bits e 64 bits. O valor parece ser escrito de modo a permitir 256 pacotes de 256 bytes cada, levando em conta o overhead diferente por pacote (estruturas com ponteiros ou inteiros de 32 bits versus 64 bits).
No Linux 4.14.18 de 64 bits: 212992 bytes
No Linux 4.4.92 de 32 bits: 163840 bytes
Os tamanhos de buffer padrão são os mesmos para os buffers de leitura e gravação. A sobrecarga por pacote é uma combinação de
struct sk_buff
estruct skb_shared_info
, portanto, depende do tamanho exato dessas estruturas (arredondadas levemente para alinhamento). Por exemplo, no kernel de 64 bits acima, o overhead é de 576 bytes por pacote.http://elixir.free-electrons.com/linux/v4.5/source/net/core/sock.c#L265
Curiosamente, se você definir um tamanho de buffer de soquete não padrão, o Linux o dobrará para fornecer as despesas gerais. Isso significa que, se você enviar pacotes menores (por exemplo, menos que os 576 bytes acima), não poderá colocar tantos bytes de dados do usuário no buffer quanto especificou para seu tamanho.