例如,我们有一个服务器-客户端应用程序。如果服务器在套接字上写了一条消息,然后在读取客户端之前将其关闭。客户端可以阅读邮件吗?
答案 0 :(得分:5)
“如果服务器在套接字上写入一条消息,然后在读取客户机之前将其关闭。客户机将能够读取该消息吗?”
是的。客户端将获得在关闭套接字的FIN数据包之前发送的数据。
答案 1 :(得分:-3)
此行为是特定于实现的,通常,您不应该假定客户端能够读取消息,Linux手册中的close(2)
说:
Be sure to use shutdown(2) to shut down all parts the connection before closing the socket.
如果要确保客户端已阅读该消息,请让该客户端确认您的应用程序协议中的操作。
当您通过套接字发送数据,然后关闭该套接字时,无法保证内核已将其内部缓冲区清空到网络,甚至不能这样做(最终有问题的网络状况)。