Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/examples/CoreExamples.java
Original file line number Diff line number Diff line change
Expand Up @@ -412,13 +412,14 @@ public void configureNative() {
System.out.println("Running with native: " + usingNative);
}

public void configureLinuxOptions(Vertx vertx, boolean fastOpen, boolean cork, boolean quickAck, boolean reusePort) {
public void configureLinuxOptions(Vertx vertx, boolean fastOpen, boolean cork, boolean quickAck, boolean reusePort, int tcpUserTimeout) {
// Available on Linux
vertx.createHttpServer(new HttpServerOptions()
.setTcpFastOpen(fastOpen)
.setTcpCork(cork)
.setTcpQuickAck(quickAck)
.setReusePort(reusePort)
.setTcpUserTimeout(tcpUserTimeout)
);
}

Expand Down
5 changes: 5 additions & 0 deletions src/main/java/io/vertx/core/http/HttpServerOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,11 @@ public HttpServerOptions setTcpQuickAck(boolean tcpQuickAck) {
return (HttpServerOptions) super.setTcpQuickAck(tcpQuickAck);
}

@Override
public HttpServerOptions setTcpUserTimeout(int tcpUserTimeout) {
return (HttpServerOptions) super.setTcpUserTimeout(tcpUserTimeout);
}

@Override
public HttpServerOptions addCrlPath(String crlPath) throws NullPointerException {
return (HttpServerOptions) super.addCrlPath(crlPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ public void configure(NetServerOptions options, boolean domainSocket, ServerBoot
if (options.isTcpFastOpen()) {
bootstrap.option(EpollChannelOption.TCP_FASTOPEN, options.isTcpFastOpen() ? pendingFastOpenRequestsThreshold : 0);
}
bootstrap.childOption(EpollChannelOption.TCP_USER_TIMEOUT, options.getTcpUserTimeout());
bootstrap.childOption(EpollChannelOption.TCP_QUICKACK, options.isTcpQuickAck());
bootstrap.childOption(EpollChannelOption.TCP_CORK, options.isTcpCork());

Expand Down
5 changes: 5 additions & 0 deletions src/main/java/io/vertx/core/net/NetClientOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,11 @@ public NetClientOptions setTcpQuickAck(boolean tcpQuickAck) {
return (NetClientOptions) super.setTcpQuickAck(tcpQuickAck);
}

@Override
public NetClientOptions setTcpUserTimeout(int tcpUserTimeout) {
return (NetClientOptions) super.setTcpUserTimeout(tcpUserTimeout);
}

@Deprecated
@Override
public ClientOptionsBase setOpenSslEngineOptions(OpenSSLEngineOptions sslEngineOptions) {
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/io/vertx/core/net/NetServerOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,11 @@ public NetServerOptions setTcpQuickAck(boolean tcpQuickAck) {
return (NetServerOptions) super.setTcpQuickAck(tcpQuickAck);
}

@Override
public NetServerOptions setTcpUserTimeout(int tcpUserTimeout) {
return (NetServerOptions) super.setTcpUserTimeout(tcpUserTimeout);
}

@Override
public NetServerOptions addCrlPath(String crlPath) throws NullPointerException {
return (NetServerOptions) super.addCrlPath(crlPath);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/io/vertx/core/net/TCPSSLOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,9 @@ public int getTcpUserTimeout() {
* @param tcpUserTimeout the tcp user timeout value
*/
public TCPSSLOptions setTcpUserTimeout(int tcpUserTimeout) {
if (tcpUserTimeout < 0) {
throw new IllegalArgumentException("tcpUserTimeout must be >= 0");
}
this.tcpUserTimeout = tcpUserTimeout;
return this;
}
Expand Down
18 changes: 18 additions & 0 deletions src/test/java/io/vertx/core/http/Http1xTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ public void testClientOptions() {
assertEquals(options, options.setTcpKeepAlive(!tcpKeepAlive));
assertEquals(!tcpKeepAlive, options.isTcpKeepAlive());

assertEquals(TCPSSLOptions.DEFAULT_TCP_USER_TIMEOUT, options.getTcpUserTimeout());
int tcpUserTimeout = TestUtils.randomPositiveInt();
assertEquals(options, options.setTcpUserTimeout(tcpUserTimeout));
assertEquals(tcpUserTimeout, options.getTcpUserTimeout());
assertIllegalArgumentException(() -> options.setTcpUserTimeout(-1000));

int soLinger = -1;
assertEquals(soLinger, options.getSoLinger());
rand = TestUtils.randomPositiveInt();
Expand Down Expand Up @@ -317,6 +323,12 @@ public void testServerOptions() {
assertEquals(options, options.setTcpKeepAlive(!tcpKeepAlive));
assertEquals(!tcpKeepAlive, options.isTcpKeepAlive());

assertEquals(TCPSSLOptions.DEFAULT_TCP_USER_TIMEOUT, options.getTcpUserTimeout());
int tcpUserTimeout = TestUtils.randomPositiveInt();
assertEquals(options, options.setTcpUserTimeout(tcpUserTimeout));
assertEquals(tcpUserTimeout, options.getTcpUserTimeout());
assertIllegalArgumentException(() -> options.setTcpUserTimeout(-1000));

int soLinger = -1;
assertEquals(soLinger, options.getSoLinger());
rand = TestUtils.randomPositiveInt();
Expand Down Expand Up @@ -584,6 +596,7 @@ public void testClientOptionsJson() {
int trafficClass = TestUtils.randomByte() + 128;
boolean tcpNoDelay = rand.nextBoolean();
boolean tcpKeepAlive = rand.nextBoolean();
int tcpUserTimeout = TestUtils.randomPositiveInt();
int soLinger = TestUtils.randomPositiveInt();
int idleTimeout = TestUtils.randomPositiveInt();
boolean ssl = rand.nextBoolean();
Expand Down Expand Up @@ -634,6 +647,7 @@ public void testClientOptionsJson() {
.put("trafficClass", trafficClass)
.put("tcpNoDelay", tcpNoDelay)
.put("tcpKeepAlive", tcpKeepAlive)
.put("tcpUserTimeout", tcpUserTimeout)
.put("soLinger", soLinger)
.put("idleTimeout", idleTimeout)
.put("ssl", ssl)
Expand Down Expand Up @@ -681,6 +695,7 @@ public void testClientOptionsJson() {
assertEquals(reuseAddress, options.isReuseAddress());
assertEquals(trafficClass, options.getTrafficClass());
assertEquals(tcpKeepAlive, options.isTcpKeepAlive());
assertEquals(tcpUserTimeout, options.getTcpUserTimeout());
assertEquals(tcpNoDelay, options.isTcpNoDelay());
assertEquals(soLinger, options.getSoLinger());
assertEquals(idleTimeout, options.getIdleTimeout());
Expand Down Expand Up @@ -888,6 +903,7 @@ public void testServerOptionsJson() {
int trafficClass = TestUtils.randomByte() + 128;
boolean tcpNoDelay = rand.nextBoolean();
boolean tcpKeepAlive = rand.nextBoolean();
int tcpUserTimeout = TestUtils.randomPositiveInt();
int soLinger = TestUtils.randomPositiveInt();
int idleTimeout = TestUtils.randomPositiveInt();
boolean ssl = rand.nextBoolean();
Expand Down Expand Up @@ -931,6 +947,7 @@ public void testServerOptionsJson() {
.put("trafficClass", trafficClass)
.put("tcpNoDelay", tcpNoDelay)
.put("tcpKeepAlive", tcpKeepAlive)
.put("tcpUserTimeout", tcpUserTimeout)
.put("soLinger", soLinger)
.put("idleTimeout", idleTimeout)
.put("ssl", ssl)
Expand Down Expand Up @@ -971,6 +988,7 @@ public void testServerOptionsJson() {
assertEquals(reuseAddress, options.isReuseAddress());
assertEquals(trafficClass, options.getTrafficClass());
assertEquals(tcpKeepAlive, options.isTcpKeepAlive());
assertEquals(tcpUserTimeout, options.getTcpUserTimeout());
assertEquals(tcpNoDelay, options.isTcpNoDelay());
assertEquals(soLinger, options.getSoLinger());
assertEquals(idleTimeout, options.getIdleTimeout());
Expand Down
Loading