java.net.SocketException: No buffer space available (maximum connections reached
?): recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocketInputStream.read(SocketInputStream.java:90)----------代码
private static final int SOCKETRECVBUFFER = 64 * 1024 * 4 * 4;//加大了也没有用 try {
socket = new Socket();
try {
socket.setReceiveBufferSize(SOCKETRECVBUFFER);
} catch (SocketException e) {
log.info("setReceiveBufferSize failed!", e);
}
socket.connect(new InetSocketAddress(host, port));
} catch (SocketException e) {
log.info("setReceiveBufferSize failed!", e);
} catch (IOException ee) {
log.info(ee + " NE fail. neIPAddr = " + host + ", remotePort = "
+ port);
throw ee;
}
try {
this.outputStream = socket.getOutputStream();
this.inputStream = socket.getInputStream();
} catch (IOException ee) {
log.warn("open in/out stream of this socket fail. localPort = "
+ socket.getLocalPort(), ee);
throw ee;
} byte[] buffer = new byte[10240];
int length = -2;
if (this.inputStream != null) {
length = this.inputStream.read(buffer); // IOException,就这个地方
?): recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocketInputStream.read(SocketInputStream.java:90)----------代码
private static final int SOCKETRECVBUFFER = 64 * 1024 * 4 * 4;//加大了也没有用 try {
socket = new Socket();
try {
socket.setReceiveBufferSize(SOCKETRECVBUFFER);
} catch (SocketException e) {
log.info("setReceiveBufferSize failed!", e);
}
socket.connect(new InetSocketAddress(host, port));
} catch (SocketException e) {
log.info("setReceiveBufferSize failed!", e);
} catch (IOException ee) {
log.info(ee + " NE fail. neIPAddr = " + host + ", remotePort = "
+ port);
throw ee;
}
try {
this.outputStream = socket.getOutputStream();
this.inputStream = socket.getInputStream();
} catch (IOException ee) {
log.warn("open in/out stream of this socket fail. localPort = "
+ socket.getLocalPort(), ee);
throw ee;
} byte[] buffer = new byte[10240];
int length = -2;
if (this.inputStream != null) {
length = this.inputStream.read(buffer); // IOException,就这个地方
http://forum.java.sun.com
http://www.cjsdn.net/post/view?bid=10&id=154857&sty=1&tpg=1&age=0
问题已解决,确实不是程序的问题。
netstat -an发现有大量的端口占用,监听很多机器的139,445端口。
确定机器中了震荡波,下载补丁安装重启,问题解决。
导致这个异常的原因应该是系统的socket大量的资源被占用,
导致没有足够的资源接收前台上报或者回复的数据。
service pack? version?
Windows2000-KB835732-x86-CHS.EXE