Eu acredito que eu rastreei isso. É indiscutivelmente uma falha em trickle
que ocorreu como resultado de um caracteristico rastejante na chamada da biblioteca socket()
.
O código trickle
redefine socket()
, como você sabe. Na parte superior de sua reimplementação no arquivo trickle-overload.c
, há uma verificação que inclui type == SOCK_STREAM
, de forma que somente as conexões do tipo SOCK_STREAM
sejam elegíveis para processamento.
O código ruby
abre o soquete com type = SOCK_STREAM | SOCK_CLOEXEC
. O SOCK_CLOEXEC
é uma extensão do Linux (desde 2.6.27) que evita o uso de uma chamada fcntl
subsequente para definir o sinalizador de fechamento no exec.
Infelizmente SOCK_STREAM
não é o mesmo que SOCK_STREAM | SOCK_CLOEXEC
, portanto, o processamento trickle
não ocorrerá até que seu código seja corrigido para permitir as extensões agora permitidas no campo socket
type
.
Eu não conheço outra alternativa além de recompilar trickle
para o seu sistema com uma comparação de tipo de soquete modificada.
(Eu enviei um relatório de erros para o Debian Bugs, já que é o meu preferido plataforma.)