使用java套接字库,我看到的是,当服务器接受tcp连接但没有从缓冲区读取数据时,同时我们的客户端继续抽取大量数据,客户端堆大小增加到最大可用并粉碎客户端应用。 无论如何我可以限制套接字缓冲区大小或使用该堆的任何东西,如果它被违反,连接被杀死?这样客户端可以检测到客户端检测到连接消失了
客户端;
this.socket = new Socket(server, port);
this.socket.setKeepAlive(true);
this.outwriter = new OutputStreamWriter(this.socket.getOutputStream());
this.outwriter.write(o.toString());
服务器端;
conn = serverSocket.accept();
答案 0 :(得分:2)
这不是套接字引起的。您的应用程序中的其他位置存在内存泄漏。您描述的行为最终将在write()
方法中阻塞,并且不会消耗任何堆内存。
答案 1 :(得分:0)
您可以使用socket.setSendBufferSize()。
虽然这有助于测试你的理论,正如@EJP所提到的,堆泄漏不会是由于发送缓冲区被填满。在这种情况下,写操作将返回错误。