Skip to content

Commit f67fdd6

Browse files
authored
Merge pull request #3345 from ControlSystemStudio/patch
step1 for fixing tcp connections delays, based on the discussion #3338
2 parents c56aae3 + 0969d1f commit f67fdd6

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

core/pv-pva/src/main/java/org/phoebus/pv/pva/PVA_Preferences.java

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public void installPreferences() throws Exception
6565
"epics_pva_server_port",
6666
"epics_pva_broadcast_port",
6767
"epics_pva_conn_tmo",
68+
"epics_pva_tcp_socket_tmo",
6869
"epics_pva_max_array_formatting",
6970
"epics_pva_send_buffer_size"
7071
})

core/pv-pva/src/main/resources/pv_pva_preferences.properties

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ epics_pva_server_port
3737
# Connection timeout in seconds
3838
epics_pva_conn_tmo
3939

40+
# TCP socket creation timeout in seconds
41+
epics_pva_tcp_socket_tmo
42+
4043
# Maximum number of array elements shown when printing data
4144
epics_pva_max_array_formatting
4245

core/pva/src/main/java/org/epics/pva/PVASettings.java

+7
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ public class PVASettings
212212
*/
213213
public static int EPICS_PVA_CONN_TMO = 30;
214214

215+
/** Socket timeout for TCP connections
216+
*
217+
* TCP socket creation timeout in seconds
218+
*/
219+
public static int EPICS_PVA_TCP_SOCKET_TMO = 5;
220+
215221
/** Maximum number of array elements shown when printing data */
216222
public static int EPICS_PVA_MAX_ARRAY_FORMATTING = 256;
217223

@@ -263,6 +269,7 @@ public class PVASettings
263269
EPICS_PVA_BROADCAST_PORT = get("EPICS_PVA_BROADCAST_PORT", EPICS_PVA_BROADCAST_PORT);
264270
EPICS_PVAS_BROADCAST_PORT = get("EPICS_PVAS_BROADCAST_PORT", EPICS_PVAS_BROADCAST_PORT);
265271
EPICS_PVA_CONN_TMO = get("EPICS_PVA_CONN_TMO", EPICS_PVA_CONN_TMO);
272+
EPICS_PVA_TCP_SOCKET_TMO = get("EPICS_PVA_TCP_SOCKET_TMO", EPICS_PVA_TCP_SOCKET_TMO);
266273
EPICS_PVA_MAX_ARRAY_FORMATTING = get("EPICS_PVA_MAX_ARRAY_FORMATTING", EPICS_PVA_MAX_ARRAY_FORMATTING);
267274
EPICS_PVAS_TLS_KEYCHAIN = get("EPICS_PVAS_TLS_KEYCHAIN", EPICS_PVAS_TLS_KEYCHAIN);
268275
EPICS_PVAS_TLS_OPTIONS = get("EPICS_PVAS_TLS_OPTIONS", EPICS_PVAS_TLS_OPTIONS);

core/pva/src/main/java/org/epics/pva/common/SecureSockets.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,18 @@ public static ServerSocket createServerSocket(final InetSocketAddress address, f
160160
public static Socket createClientSocket(final InetSocketAddress address, final boolean tls) throws Exception
161161
{
162162
initialize();
163-
if (! tls)
164-
return new Socket(address.getAddress(), address.getPort());
163+
int connection_timeout = Math.max(1, PVASettings.EPICS_PVA_TCP_SOCKET_TMO) * 1000; // Use EPICS_PVA_TCP_SOCKET_TMO for socket connection timeout, but at least 1 second
164+
165+
if (!tls) {
166+
Socket socket = new Socket();
167+
socket.connect(address, connection_timeout);
168+
return socket;
169+
}
165170

166171
if (tls_client_sockets == null)
167172
throw new Exception("TLS is not supported. Configure EPICS_PVA_TLS_KEYCHAIN");
168-
final SSLSocket socket = (SSLSocket) tls_client_sockets.createSocket(address.getAddress(), address.getPort());
173+
final SSLSocket socket = (SSLSocket) tls_client_sockets.createSocket();
174+
socket.connect(address, connection_timeout);
169175
socket.setEnabledProtocols(PROTOCOLS);
170176
// Handshake starts when first writing, but that might delay SSL errors, so force handshake before we use the socket
171177
socket.startHandshake();

0 commit comments

Comments
 (0)