Intermitentemente, em um raspberry pi executando raspbian, vejo comportamento bizarro com (uma das várias) conexões TCP estabelecidas. O receptor tem o que ele acredita ser um soquete aberto válido obtido de aceitar. Ele está sentado em uma leitura () e pedindo um byte (em alguns casos, mais, mas eu vi isso no caso de um byte).
O remetente enviou dados. / proc / net / tcp mostra claramente o socket no estado Established (01), com uma contagem diferente de zero na fila de recebimento - e um inode de 0. O read () permanece bloqueado.
Isso acontece raramente e penso apenas em soquetes abertos por dias e semanas de cada vez. Ele afetou várias aplicações diferentes no mesmo raspberry pi 3B +; nem sempre é o mesmo código afetado. Não tenho certeza se a tomada começa danificada ou acaba dessa maneira ao longo do tempo; alguns desses soquetes são usados para o tráfego que acontece muito raramente.
Não consigo atrair a atenção para o problema nos fóruns do grosa; mas isso aconteceu várias vezes agora para mim. Eu estou procurando insights sobre como isso pode acontecer; o ideal é que alguém diga "ah, a implementação TCP deles esqueceu de esconder o cache depois de globbing o buffer snoid" ou algo assim. Alguém tem uma ideia de como isso é abordado?
Aqui está a linha relevante em / proc / net / tcp:
22: 8901A8C0:27D9 A701A8C0:ED1C 01 00000000:00000103:00000000 00000000 0 0 0 1 aa078c80 20 4 30 10 -1
Dados mais relevantes: Eu estava mexendo com cabos de energia e matei a energia para um interruptor que o pi em questão está ligado. Um dos soquetes acabou nesse estado inode = 0. A interrupção de energia foi breve e uma conexão TCP provavelmente teria navegado diretamente por ela sem perceber, porque nenhum byte estava sendo enviado no soquete naquele momento. Mas sinto que isso está de alguma forma relacionado.