O que acontece quando um servidor envia um pacote de dados para o cliente quando o último (cliente) está no estado TCP FIN-WAIT-1?

2

De acordo com o Guia TCP / IP , quando uma sessão TCP é fechada pelo Cliente, ela envie um pacote com FIN definido para o servidor e transite para FIN-WAIT-1 , no entanto, diz:

In this state the client can still receive data from the server but will no longer accept data from its local application to be sent to the server.

Então, minha pergunta é: o que acontece se o servidor enviar dados de volta ao cliente? já que o aplicativo provavelmente já pode estar fechado ou não em um estado em que possa ler mais do soquete, onde os dados estão indo? Além disso, o cliente enviará ACK de volta para esses dados? o que acontece com a conexão então? ( RST talvez?)

Nota: Eu não me importo com esses dados, eu só quero saber se existe um vazamento de memória, dado que nenhum processo leu a partir do buffer TCP, ou se a própria pilha de rede cuidará disso.

Obrigado.

    
por ligregni 14.07.2016 / 03:56

1 resposta

2

since the application may probably be closed already or not in a state where it can read from the socket anymore, where is the data going to go?

Depende da implementação. Se o soquete for fechado no final do aplicativo, a pilha TCP pode simplesmente soltar os dados recebidos no chão. Como alternativa, você poderia ter uma implementação que não retornasse da chamada close () (ou equivalente) até que o FIN do servidor fosse recebido, permitindo que outro thread continuasse para read () do soquete (embora umwrite % () receberia um erro). Se o read () não fosse concluído antes do FIN do servidor chegar, o EOF poderia ser sinalizado. (Substitua "thread" por "callback" em um modelo assíncrono).

A melhor maneira de responder à sua pergunta: teste-a em sua (s) implementação (ões) preferida (s).

    
por 14.07.2016 / 05:33

Tags