Pergunta

Eu tenho uma implementação que usa ioctl (FIONREAD) para determinar o número de pendentes octetos no soquete Raw buffer de recepção em Linux e, em seguida, chamar um recv sobre isso.

Eu li em algum lugar que a interface ioctl para sockets em Linux na verdade não devolver os octetos pendentes reais. Isso é correto?

Estou perguntando porque eu estou perdendo algumas mensagens de vez em quando em altas cargas e até agora não reembolsaram foi capaz de descobrir onde. É a sua melhor maneira de descobrir o número de pendentes octetos no soquete Raw.

Foi útil?

Solução

Há sempre a possibilidade de que o kernel irá descartar pacotes se sua aplicação não é capaz de manter-se com a taxa de pacotes (como o buffer de kernel não é ilimitado).

BTW, por que você precisa saber o número de octetos de qualquer maneira? Como estes são tomadas por pacotes, o comprimento de um pacote será sempre limitado pelo tamanho máximo de quadro de interface de rede, para que apenas passar um tampão suficiente grande para RECV.

Dito isto, se o desempenho for crítico, você deve olhar para PACKET_MMAP suporte no Linux.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top