]> source.dussan.org Git - tigervnc.git/commitdiff
vncserver: Display check should avoid duplicate code
authorMark Mielke <mark.mielke@gmail.com>
Wed, 29 Jul 2020 04:11:28 +0000 (00:11 -0400)
committerMark Mielke <mark.mielke@gmail.com>
Wed, 29 Jul 2020 04:32:46 +0000 (00:32 -0400)
The display check had duplicate code to first check if the X11 port is
not in use, and then check that the RFB port is not in use. Eliminate
the duplicate code by using a for-loop.

unix/vncserver/vncserver.in

index 670bcf1bf8da80049030e0e776c9a0fdd2d55d6e..1b5717e8984c7db12c9f4dc5967edd0376931928 100755 (executable)
@@ -374,21 +374,17 @@ sub CheckDisplayNumber
     my $rfb_port = 5900 + $n;
     my $x11_port = 6000 + $n;
 
-    socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
-    eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
-    if (!bind(S, pack('S n x12', $AF_INET, $x11_port))) {
-       close(S);
-       return 0;
-    }
-    close(S);
-
-    socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
-    eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
-    if (!bind(S, pack('S n x12', $AF_INET, $rfb_port))) {
-       close(S);
-       return 0;
+    for my $port ($rfb_port, $x11_port) {
+        # Bind to port to confirm it is not in use.
+        socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
+        eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
+        if (!bind(S, pack('S n x12', $AF_INET, $port))) {
+            # Port is in use.
+            close(S);
+            return 0;
+        }
+        close(S);
     }
-    close(S);
 
     my $x11_unix_domain = "/tmp/.X11-unix/X$n";