2011-09-08 43 views
2
  1. 如果一个tcp/ip套接字上的read()接收到文件的结尾,那么eof的存在是否会导致套接字终止?C Sockets termination

  2. 在tcp/ip套接字上执行read()时,如果流的大小未知,读者是否会收到EOF,以便他可以停止进一步阅读?

回答

2

否。在TCP协议中没有EOF这样的东西。

如果您想在应用程序协议中定义一个协议,您可以这样做(而且您应该),但是read在它看到它时不会停止或关闭套接字。

TCP纯粹是流式基础。提取“数据包”的数据取决于应用程序。

如果您只需要通过TCP连接发送一条消息,则可以在完成发送后关闭发送方的套接字。然后read接收端将只读取与发送的数据相同的数据,并且在没有更多内容被读取时返回0。但在这种情况下,您必须重新打开一个新连接才能发送下一条消息。

+0

我同意 - 需要TCP套接字的FIN消息才能开始关闭。 –

+0

TCP是一个基于流的协议,Stream按照定义有一个流头和一个流结束。所以如果发送者发送数据,接收端的流应该有一个流头和一个流结束。我认为的流结束是EOF。这是不正确的? – Jimm

+1

@Jimm - 不,这是不正确的。在应用程序级别没有头或终点。 TCP正在发送和处理较低级别的数据包。它负责设置流并结束它。在应用程序级别,您基本上只知道从读取返回零字节时没有剩余可读的内容。 – Duck

相关问题