如果读取返回-1,则套接字是否自动关闭?

时间:2015-02-18 02:03:11

标签: java sockets tcp

  out.close ();
  in.read ( ByteBuffer.allocate ( 1 ) );
  in.close ();

在上面的代码段中,outWritableByteChannelinReadableByteChannel。一旦其中一个对等体发送了EOT信号,就会在处理结束时找到该代码。在close()上调用out,然后读取in以从远程对等方的套接字获取EOF。当read()返回-1时,表示对等方已关闭套接字。下一行的close()是多余的,因为本地套接字已经自动关闭了吗?

2 个答案:

答案 0 :(得分:4)

从对等端接收流末尾并关闭通道是两回事。流末尾仅意味着将不再接收数据,但该通道仍在本地打开。您仍然应该调用close()来释放正在使用的任何本地资源。

答案 1 :(得分:2)

  

当read()返回-1时,表示对等方已关闭套接字。

他的套接字。不是你的。 连接目前在入站方向上是半封闭的。你应该关闭你的终端,即你的插座。