2
如果一个tcp/ip套接字上的read()接收到文件的结尾,那么eof的存在是否会导致套接字终止?C Sockets termination
在tcp/ip套接字上执行read()时,如果流的大小未知,读者是否会收到EOF,以便他可以停止进一步阅读?
如果一个tcp/ip套接字上的read()接收到文件的结尾,那么eof的存在是否会导致套接字终止?C Sockets termination
在tcp/ip套接字上执行read()时,如果流的大小未知,读者是否会收到EOF,以便他可以停止进一步阅读?
否。在TCP协议中没有EOF这样的东西。
如果您想在应用程序协议中定义一个协议,您可以这样做(而且您应该),但是read
在它看到它时不会停止或关闭套接字。
TCP纯粹是流式基础。提取“数据包”的数据取决于应用程序。
如果您只需要通过TCP连接发送一条消息,则可以在完成发送后关闭发送方的套接字。然后read
接收端将只读取与发送的数据相同的数据,并且在没有更多内容被读取时返回0
。但在这种情况下,您必须重新打开一个新连接才能发送下一条消息。
我同意 - 需要TCP套接字的FIN消息才能开始关闭。 –
TCP是一个基于流的协议,Stream按照定义有一个流头和一个流结束。所以如果发送者发送数据,接收端的流应该有一个流头和一个流结束。我认为的流结束是EOF。这是不正确的? – Jimm
@Jimm - 不,这是不正确的。在应用程序级别没有头或终点。 TCP正在发送和处理较低级别的数据包。它负责设置流并结束它。在应用程序级别,您基本上只知道从读取返回零字节时没有剩余可读的内容。 – Duck