Tamanho dos dados que podem ser gravados em / read from sockets

4

Eu queria saber se existe uma maneira fácil de encontrar o tamanho máximo suportado pelos sockets do Linux? (Isso é configurável? Se sim, onde?)

Por exemplo, a maioria dos exemplos de soquete encontrados na web envia "Hello Socket" ou alguma outra string pequena, no entanto, se eu colocar todo o War And Peace no soquete, quando quebrar?

Como tudo é um arquivo, é o tamanho máximo do arquivo? Como é coordenado quando os soquetes conectam diferentes sistemas de arquivos?

Estou mais interessado em soquetes de fluxo.

    
por NWS 06.05.2012 / 21:11

2 respostas

4

net.core.rmem_max e net.core.wmem_max são sua coisa. Você pode examinar seus valores com

# sysctl net.core.rmem_max

e defina-os com

# sysctl -w net.core.rmem_max=8388608

Estes são os tamanhos do buffer de soquete, ao receber e enviar, respectivamente. Eles têm valores padrão também - rmem_default e wmem_default .

    
por 07.05.2012 / 12:54
5

Você não disse que tipo de soquetes.

Soquetes de fluxo

Você pode enviar (por definição) uma quantidade ilimitada de dados. Se ele não puder ser todo armazenado em buffer ou enviado de uma só vez ou se o receptor não puder receber tudo de uma vez, o envio bloqueará (para o bloqueio de soquetes) ou retornará uma contagem parcial de bytes gravados ou EAGAIN (para soquetes não bloqueados). / p>

Soquetes de datagrama

Depende do protocolo. O UDPv4 suporta apenas 65536 bytes por datagrama. O UDPv6 suporta muito mais. Soquetes de domínio UNIX provavelmente suportam ainda mais: você provavelmente está limitado pela memória neste caso.

    
por 06.05.2012 / 21:30