关闭套接字如何影响对方的侧读

How does closing a socket affects other's side read

本文关键字:影响 套接字 何影响      更新时间:2023-10-16

例如,我们有一个服务器-客户端应用程序。如果服务器在套接字上写入消息,然后在客户端读取之前将其关闭。客户端是否能够读取消息?

"如果服务器在套接字上写入消息,然后在客户端读取之前将其关闭。客户端是否能够阅读消息?

是的。客户端将获取在关闭套接字的 FIN 数据包之前发送的数据。

此行为是特定于实现的,通常,您不应假设客户端能够读取消息,Linux 手册中的close(2)说:

Be sure to use shutdown(2) to shut down all parts the connection before closing the socket.

如果要确保客户端已读取该消息,请使该客户端在应用程序协议中确认该操作。

当您通过套接字

发送数据,然后关闭同一套接字时,无法保证内核已将其内部缓冲区清空到网络,甚至无法这样做(最终网络条件有问题(。