source: trunk/packages/xen-3.1/xen-3.1/tools/ioemu/patches/vnc-display-find-unused @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

File size: 3.7 KB
Line 
1Index: ioemu/vnc.c
2===================================================================
3--- ioemu.orig/vnc.c    2007-05-03 10:24:06.000000000 +0100
4+++ ioemu/vnc.c 2007-05-03 10:24:06.000000000 +0100
5@@ -1197,7 +1197,7 @@
6     }
7 }
8 
9-void vnc_display_init(DisplayState *ds, int display)
10+int vnc_display_init(DisplayState *ds, int display, int find_unused)
11 {
12     struct sockaddr_in addr;
13     int reuse_addr, ret;
14@@ -1228,10 +1228,6 @@
15        exit(1);
16     }
17 
18-    addr.sin_family = AF_INET;
19-    addr.sin_port = htons(5900 + display);
20-    memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
21-
22     reuse_addr = 1;
23     ret = setsockopt(vs->lsock, SOL_SOCKET, SO_REUSEADDR,
24                     (const char *)&reuse_addr, sizeof(reuse_addr));
25@@ -1240,7 +1236,16 @@
26        exit(1);
27     }
28 
29+ retry:
30+    addr.sin_family = AF_INET;
31+    addr.sin_port = htons(5900 + display);
32+    memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
33+
34     if (bind(vs->lsock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
35+       if (find_unused && errno == EADDRINUSE) {
36+           display++;
37+           goto retry;
38+       }
39        fprintf(stderr, "bind() failed\n");
40        exit(1);
41     }
42@@ -1261,6 +1266,8 @@
43     vs->ds->dpy_refresh = vnc_dpy_refresh;
44 
45     vnc_dpy_resize(vs->ds, 640, 400);
46+
47+    return display;
48 }
49 
50 int vnc_start_viewer(int port)
51Index: ioemu/vl.c
52===================================================================
53--- ioemu.orig/vl.c     2007-05-03 10:24:06.000000000 +0100
54+++ ioemu/vl.c  2007-05-03 10:24:06.000000000 +0100
55@@ -122,6 +122,7 @@
56 static DisplayState display_state;
57 int nographic;
58 int vncviewer;
59+int vncunused;
60 const char* keyboard_layout = NULL;
61 int64_t ticks_per_sec;
62 int boot_device = 'c';
63@@ -5417,6 +5418,7 @@
64            "-loadvm file    start right away with a saved state (loadvm in monitor)\n"
65           "-vnc display    start a VNC server on display\n"
66            "-vncviewer      start a vncviewer process for this domain\n"
67+           "-vncunused      bind the VNC server to an unused port\n"
68            "-acpi           disable or enable ACPI of HVM domain \n"
69            "\n"
70            "During emulation, the following keys are useful:\n"
71@@ -5504,6 +5506,7 @@
72     QEMU_OPTION_vcpus,
73     QEMU_OPTION_acpi,
74     QEMU_OPTION_vncviewer,
75+    QEMU_OPTION_vncunused,
76 };
77 
78 typedef struct QEMUOption {
79@@ -5579,6 +5582,7 @@
80     { "smp", HAS_ARG, QEMU_OPTION_smp },
81     { "vnc", HAS_ARG, QEMU_OPTION_vnc },
82     { "vncviewer", 0, QEMU_OPTION_vncviewer },
83+    { "vncunused", 0, QEMU_OPTION_vncunused },
84     
85     /* temporary options */
86     { "usb", 0, QEMU_OPTION_usb },
87@@ -5938,6 +5942,7 @@
88     snapshot = 0;
89     nographic = 0;
90     vncviewer = 0;
91+    vncunused = 0;
92     kernel_filename = NULL;
93     kernel_cmdline = "";
94 #ifdef TARGET_PPC
95@@ -6336,6 +6341,11 @@
96             case QEMU_OPTION_vncviewer:
97                 vncviewer++;
98                 break;
99+            case QEMU_OPTION_vncunused:
100+                vncunused++;
101+                if (vnc_display == -1)
102+                    vnc_display = 0;
103+                break;
104             }
105         }
106     }
107@@ -6537,7 +6547,7 @@
108     if (nographic) {
109         dumb_display_init(ds);
110     } else if (vnc_display != -1) {
111-       vnc_display_init(ds, vnc_display);
112+       vnc_display = vnc_display_init(ds, vnc_display, vncunused);
113        if (vncviewer)
114            vnc_start_viewer(vnc_display);
115     } else {
116Index: ioemu/vl.h
117===================================================================
118--- ioemu.orig/vl.h     2007-05-03 10:24:06.000000000 +0100
119+++ ioemu/vl.h  2007-05-03 10:24:06.000000000 +0100
120@@ -785,7 +785,7 @@
121 void cocoa_display_init(DisplayState *ds, int full_screen);
122 
123 /* vnc.c */
124-void vnc_display_init(DisplayState *ds, int display);
125+int vnc_display_init(DisplayState *ds, int display, int find_unused);
126 int vnc_start_viewer(int port);
127 
128 /* ide.c */
Note: See TracBrowser for help on using the repository browser.