Skip to content

Commit cf9bc70

Browse files
authored
Merge pull request TooTallNate#529 from marci4/master
Added setter for SO_REUSEADDR
2 parents c080657 + c0cc4ef commit cf9bc70

File tree

5 files changed

+34
-5
lines changed

5 files changed

+34
-5
lines changed

src/main/java/org/java_websocket/AbstractWebSocket.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@ public abstract class AbstractWebSocket extends WebSocketAdapter {
4343
*/
4444
private boolean tcpNoDelay;
4545

46-
/**
46+
/**
47+
* Attribute which allows you to enable/disable the SO_REUSEADDR socket option.
48+
*/
49+
private boolean reuseAddr;
50+
51+
/**
4752
* Attribute for a timer allowing to check for lost connections
4853
*/
4954
private Timer connectionLostTimer;
@@ -174,4 +179,24 @@ public void setTcpNoDelay( boolean tcpNoDelay ) {
174179
this.tcpNoDelay = tcpNoDelay;
175180
}
176181

182+
/**
183+
* Tests Tests if SO_REUSEADDR is enabled.
184+
*
185+
* @return a boolean indicating whether or not SO_REUSEADDR is enabled.
186+
*/
187+
public boolean isReuseAddr() {
188+
return reuseAddr;
189+
}
190+
191+
/**
192+
* Setter for soReuseAddr
193+
* <p>
194+
* Enable/disable SO_REUSEADDR for the socket
195+
*
196+
* @param reuseAddr whether to enable or disable SO_REUSEADDR
197+
*/
198+
public void setReuseAddr( boolean reuseAddr ) {
199+
this.reuseAddr = reuseAddr;
200+
}
201+
177202
}

src/main/java/org/java_websocket/client/WebSocketClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ public WebSocketClient( URI serverUri , Draft protocolDraft , Map<String,String>
130130
this.headers = httpHeaders;
131131
this.connectTimeout = connectTimeout;
132132
setTcpNoDelay( false );
133+
setReuseAddr( false );
133134
this.engine = new WebSocketImpl( this, protocolDraft );
134135
}
135136

@@ -240,9 +241,9 @@ public void run() {
240241
}
241242

242243
socket.setTcpNoDelay( isTcpNoDelay() );
244+
socket.setReuseAddress( isReuseAddr() );
243245

244246
if( !socket.isBound() ) {
245-
246247
socket.connect( new InetSocketAddress( uri.getHost(), getPort() ), connectTimeout );
247248
}
248249

src/main/java/org/java_websocket/drafts/Draft_6455.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.java_websocket.framing.Framedata;
3636
import org.java_websocket.framing.FramedataImpl1;
3737
import org.java_websocket.handshake.*;
38-
import org.java_websocket.util.Charsetfunctions;
3938

4039
import java.math.BigInteger;
4140
import java.nio.ByteBuffer;
@@ -177,6 +176,8 @@ public Draft copyInstance() {
177176
@Override
178177
public ByteBuffer createBinaryFrame( Framedata framedata ) {
179178
getExtension().encodeFrame( framedata );
179+
if( WebSocketImpl.DEBUG )
180+
System.out.println( "afterEnconding(" + framedata.getPayloadData().remaining() + "): {" + ( framedata.getPayloadData().remaining() > 1000 ? "too big to display" : new String( framedata.getPayloadData().array() ) ) + "}" );
180181
return super.createBinaryFrame( framedata );
181182
}
182183

@@ -262,7 +263,7 @@ public Framedata translateSingleFrame( ByteBuffer buffer ) throws IncompleteExce
262263
getExtension().isFrameValid( frame );
263264
getExtension().decodeFrame( frame );
264265
if( WebSocketImpl.DEBUG )
265-
System.out.println( "Decode Payload after: " + Arrays.toString( Charsetfunctions.utf8Bytes( new String( frame.getPayloadData().array() ) ) ) );
266+
System.out.println( "afterDecoding(" + frame.getPayloadData().remaining() + "): {" + ( frame.getPayloadData().remaining() > 1000 ? "too big to display" : new String( frame.getPayloadData().array() ) ) + "}" );
266267
frame.isValid();
267268
return frame;
268269
}

src/main/java/org/java_websocket/framing/FramedataImpl1.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public void append(Framedata nextframe) {
157157

158158
@Override
159159
public String toString() {
160-
return "Framedata{ optcode:" + getOpcode() + ", fin:" + isFin() + ", rsv1:" + isRSV1() + ", rsv2:" + isRSV2() + ", rsv3:" + isRSV3() + ", payloadlength:[pos:" + unmaskedpayload.position() + ", len:" + unmaskedpayload.remaining() + "], payload:" + Arrays.toString(Charsetfunctions.utf8Bytes(new String(unmaskedpayload.array()))) + "}";
160+
return "Framedata{ optcode:" + getOpcode() + ", fin:" + isFin() + ", rsv1:" + isRSV1() + ", rsv2:" + isRSV2() + ", rsv3:" + isRSV3() + ", payloadlength:[pos:" + unmaskedpayload.position() + ", len:" + unmaskedpayload.remaining() + "], payload:" + ( unmaskedpayload.remaining() > 1000 ? "(too big to display)" : new String( unmaskedpayload.array() ) ) + "}";
161161
}
162162

163163
/**

src/main/java/org/java_websocket/server/WebSocketServer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ public WebSocketServer( InetSocketAddress address , int decodercount , List<Draf
201201
this.address = address;
202202
this.connections = connectionscontainer;
203203
setTcpNoDelay(false);
204+
setReuseAddr(false);
204205
iqueue = new LinkedList<WebSocketImpl>();
205206

206207
decoders = new ArrayList<WebSocketWorker>( decodercount );
@@ -318,6 +319,7 @@ public void run() {
318319
server.configureBlocking( false );
319320
ServerSocket socket = server.socket();
320321
socket.setReceiveBufferSize( WebSocketImpl.RCVBUF );
322+
socket.setReuseAddress( isReuseAddr() );
321323
socket.bind( address );
322324
selector = Selector.open();
323325
server.register( selector, server.validOps() );

0 commit comments

Comments
 (0)