diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java
index 32f3fdba..961eda28 100644
--- a/src/main/java/org/java_websocket/server/WebSocketServer.java
+++ b/src/main/java/org/java_websocket/server/WebSocketServer.java
@@ -26,9 +26,7 @@
package org.java_websocket.server;
import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
+import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.CancelledKeyException;
import java.nio.channels.ClosedByInterruptException;
@@ -108,6 +106,12 @@ public abstract class WebSocketServer extends AbstractWebSocket implements Runna
private WebSocketServerFactory wsf = new DefaultWebSocketServerFactory();
+ /**
+ * Attribute which allows you to configure the socket "backlog" parameter
+ * which determines how many client connections can be queued.
+ */
+ private int maxPendingConnections = -1;
+
/**
* Creates a WebSocketServer that will attempt to
* listen on port WebSocketImpl.DEFAULT_PORT.
@@ -308,6 +312,24 @@ public List getDraft() {
return Collections.unmodifiableList( drafts );
}
+ /**
+ * Set the requested maximum number of pending connections on the socket. The exact semantics are implementation
+ * specific. The value provided should be greater than 0. If it is less than or equal to 0, then
+ * an implementation specific default will be used. This option will be passed as "backlog" parameter to {@link ServerSocket#bind(SocketAddress, int)}
+ */
+ public void setMaxPendingConnections(int numberOfConnections) {
+ maxPendingConnections = numberOfConnections;
+ }
+
+ /**
+ * Returns the currently configured maximum number of pending connections.
+ *
+ * @see #setMaxPendingConnections(int)
+ */
+ public int getMaxPendingConnections() {
+ return maxPendingConnections;
+ }
+
// Runnable IMPLEMENTATION /////////////////////////////////////////////////
public void run() {
if (!doEnsureSingleThread()) {
@@ -505,7 +527,7 @@ private boolean doSetupSelectorAndServerThread() {
ServerSocket socket = server.socket();
socket.setReceiveBufferSize( WebSocketImpl.RCVBUF );
socket.setReuseAddress( isReuseAddr() );
- socket.bind( address );
+ socket.bind( address, getMaxPendingConnections() );
selector = Selector.open();
server.register( selector, server.validOps() );
startConnectionLostTimer();