Simplify error handling on socket creation

On any error, all previously opened sockets must be closed.

Handle these errors in a single catch-block. Currently, there are only 2
sockets, but this will simplify even more with more sockets.

Note: this commit is better displayed with --ignore-space-change (-b).
This commit is contained in:
Romain Vimont 2023-02-03 16:53:44 +01:00
parent ef6a3b97a7
commit 5b2ec66222

View file

@ -58,34 +58,34 @@ public final class DesktopConnection implements Closeable {
public static DesktopConnection open(int scid, boolean tunnelForward, boolean control, boolean sendDummyByte) throws IOException { public static DesktopConnection open(int scid, boolean tunnelForward, boolean control, boolean sendDummyByte) throws IOException {
String socketName = getSocketName(scid); String socketName = getSocketName(scid);
LocalSocket videoSocket; LocalSocket videoSocket = null;
LocalSocket controlSocket = null; LocalSocket controlSocket = null;
if (tunnelForward) { try {
try (LocalServerSocket localServerSocket = new LocalServerSocket(socketName)) { if (tunnelForward) {
videoSocket = localServerSocket.accept(); try (LocalServerSocket localServerSocket = new LocalServerSocket(socketName)) {
if (sendDummyByte) { videoSocket = localServerSocket.accept();
// send one byte so the client may read() to detect a connection error if (sendDummyByte) {
videoSocket.getOutputStream().write(0); // send one byte so the client may read() to detect a connection error
} videoSocket.getOutputStream().write(0);
if (control) { }
try { if (control) {
controlSocket = localServerSocket.accept(); controlSocket = localServerSocket.accept();
} catch (IOException | RuntimeException e) {
videoSocket.close();
throw e;
} }
} }
} } else {
} else { videoSocket = connect(socketName);
videoSocket = connect(socketName); if (control) {
if (control) {
try {
controlSocket = connect(socketName); controlSocket = connect(socketName);
} catch (IOException | RuntimeException e) {
videoSocket.close();
throw e;
} }
} }
} catch (IOException | RuntimeException e) {
if (videoSocket != null) {
videoSocket.close();
}
if (controlSocket != null) {
controlSocket.close();
}
throw e;
} }
return new DesktopConnection(videoSocket, controlSocket); return new DesktopConnection(videoSocket, controlSocket);