diff --git a/src/main/java/org/java_websocket/AbstractWebSocket.java b/src/main/java/org/java_websocket/AbstractWebSocket.java index ee3cc13d..5fc52a12 100644 --- a/src/main/java/org/java_websocket/AbstractWebSocket.java +++ b/src/main/java/org/java_websocket/AbstractWebSocket.java @@ -102,6 +102,13 @@ public abstract class AbstractWebSocket extends WebSocketAdapter { */ private final Object syncConnectionLost = new Object(); + /** + * TCP receive buffer size that will be used for sockets + * + * @since 1.5.7 + */ + private int receiveBufferSize = 65536; + /** * Get the interval checking for lost connections Default is 60 seconds * @@ -336,4 +343,25 @@ public boolean isDaemon() { public void setDaemon(boolean daemon) { this.daemon = daemon; } + + /** + * Returns the TCP receive buffer size that will be used for sockets. + * @see java.net.Socket#setReceiveBufferSize(int) + * + * @since 1.5.7 + */ + public int getReceiveBufferSize() { + return receiveBufferSize; + } + + /** + * Sets the TCP receive buffer size that will be used for sockets. + * @see java.net.Socket#setReceiveBufferSize(int) + * + * @since 1.5.7 + */ + public void setReceiveBufferSize(int receiveBufferSize) { + this.receiveBufferSize = receiveBufferSize; + } + } diff --git a/src/main/java/org/java_websocket/WebSocketImpl.java b/src/main/java/org/java_websocket/WebSocketImpl.java index c2cd223b..3289aefc 100644 --- a/src/main/java/org/java_websocket/WebSocketImpl.java +++ b/src/main/java/org/java_websocket/WebSocketImpl.java @@ -85,11 +85,6 @@ public class WebSocketImpl implements WebSocket { */ public static final int DEFAULT_WSS_PORT = 443; - /** - * Initial buffer size - */ - public static final int RCVBUF = 16384; - /** * Logger instance * diff --git a/src/main/java/org/java_websocket/client/WebSocketClient.java b/src/main/java/org/java_websocket/client/WebSocketClient.java index 18cea8a2..afa9c5e7 100644 --- a/src/main/java/org/java_websocket/client/WebSocketClient.java +++ b/src/main/java/org/java_websocket/client/WebSocketClient.java @@ -481,6 +481,7 @@ public void run() { socket.setTcpNoDelay(isTcpNoDelay()); socket.setReuseAddress(isReuseAddr()); + socket.setReceiveBufferSize(getReceiveBufferSize()); if (!socket.isConnected()) { InetSocketAddress addr = dnsResolver == null ? InetSocketAddress.createUnresolved(uri.getHost(), getPort()) : new InetSocketAddress(dnsResolver.resolve(uri), this.getPort()); @@ -531,7 +532,7 @@ public void run() { writeThread.setDaemon(isDaemon()); writeThread.start(); - byte[] rawbuffer = new byte[WebSocketImpl.RCVBUF]; + byte[] rawbuffer = new byte[getReceiveBufferSize()]; int readBytes; try { diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 8e00c5b2..036c3d40 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -578,7 +578,7 @@ private boolean doSetupSelectorAndServerThread() { server = ServerSocketChannel.open(); server.configureBlocking(false); ServerSocket socket = server.socket(); - socket.setReceiveBufferSize(WebSocketImpl.RCVBUF); + socket.setReceiveBufferSize(getReceiveBufferSize()); socket.setReuseAddress(isReuseAddr()); socket.bind(address, getMaxPendingConnections()); selector = Selector.open(); @@ -655,7 +655,7 @@ protected void releaseBuffers(WebSocket c) throws InterruptedException { } public ByteBuffer createBuffer() { - return ByteBuffer.allocate(WebSocketImpl.RCVBUF); + return ByteBuffer.allocate(getReceiveBufferSize()); } protected void queue(WebSocketImpl ws) throws InterruptedException {