diff --git a/Transport/src/main/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandler.java b/Transport/src/main/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandler.java index 8a2e8a22d..f1f4a86ae 100644 --- a/Transport/src/main/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandler.java +++ b/Transport/src/main/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandler.java @@ -72,6 +72,7 @@ public void initialize() throws IOException { if (serverSocket == null || serverSocket.isClosed()) { throw new IOException("TransportHandler not preinitialized"); } + serverSocket.setSoTimeout((int) timeout); socket = serverSocket.accept(); socket.setSoTimeout((int) timeout); } diff --git a/Transport/src/test/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandlerTest.java b/Transport/src/test/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandlerTest.java index 79d208afa..9903c04c7 100644 --- a/Transport/src/test/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandlerTest.java +++ b/Transport/src/test/java/de/rub/nds/tlsattacker/transport/tcp/ServerTcpTransportHandlerTest.java @@ -13,6 +13,7 @@ import de.rub.nds.tlsattacker.util.FreePortFinder; import java.io.IOException; import java.net.Socket; +import java.net.SocketTimeoutException; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -91,4 +92,26 @@ public void fullTest() throws IOException { assertArrayEquals(new byte[] {4, 3, 2, 1}, received); } } + + /** Test that serverSocket.accept() timeout works correctly */ + @Test + public void testAcceptTimeout() throws IOException { + // Create handler with short timeout + ServerTcpTransportHandler timeoutHandler = + new ServerTcpTransportHandler(500, 500, FreePortFinder.getPossiblyFreePort()); + try { + timeoutHandler.preInitialize(); + // Try to initialize without connecting - should timeout + assertThrows( + SocketTimeoutException.class, + () -> { + timeoutHandler.initialize(); + }); + } finally { + if (timeoutHandler.getServerSocket() != null + && !timeoutHandler.getServerSocket().isClosed()) { + timeoutHandler.getServerSocket().close(); + } + } + } }