根据TCP / IP指南 ,当客户端closures一个TCP会话时,它将发送一个FIN设置给服务器的数据包并转换到FIN-WAIT-1 ,但是它说:
在这种状态下,客户端仍然可以从服务器接收数据,但不再接受来自本地应用程序的数据发送到服务器。
所以,我的问题是,如果服务器发回数据到客户端会发生什么? 因为应用程序可能已经被closures了,或者没有可以从套接字中读取的状态,数据将在哪里去? 此外,客户端是否会发送ACK回来的数据? 接下来会发生什么? ( RST也许?)
注意:我不关心这样的数据,我只是想知道是否存在潜在的内存泄漏,因为没有从TCP缓冲区读取进程,或者networking堆栈本身会处理这个问题。
谢谢。
因为应用程序可能已经被closures了,或者没有可以从套接字中读取的状态,数据将在哪里去?
它依赖于实现。 如果套接字在应用程序结束时closures,则TCP堆栈可以将传入的数据放在地板上。 或者,你可以有一个实现,它不会从close ()调用返回(或者等价的),直到接收到服务器的FIN,允许另一个线程继续从套接字read ()(尽pipewrite ()会收到错误)。 如果read ()在服务器的FIN到达之前没有完成,EOF可以被发信号通知。 (在asynchronous模型中用“callback”replace“线程”)。
回答您的问题的最佳方法:在您首选的实施scheme上进行testing。