Skip to content

Commit

Permalink
Allow user to specify max number of pending connections to a server
Browse files Browse the repository at this point in the history
Adds a field and two new methods to WebSocketServer: setMaxPendingConnections(int) and getMaxPendingConnections() and uses the value as a parameter when binding the server socket.
  • Loading branch information
PhilipRoman committed Apr 22, 2020
1 parent 4232021 commit 3ebbe21
Showing 1 changed file with 26 additions and 4 deletions.
30 changes: 26 additions & 4 deletions src/main/java/org/java_websocket/server/WebSocketServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 <var>WebSocketImpl.DEFAULT_PORT</var>.
Expand Down Expand Up @@ -308,6 +312,24 @@ public List<Draft> 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()) {
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 3ebbe21

Please sign in to comment.