mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
qemu-char: ask and print error information from qemu-sockets
Before:
$ qemu-system-x86_64 -monitor tcp:localhost:6000
(starts despite error)
$ qemu-system-x86_64 -monitor tcp:foo.bar:12345
getaddrinfo(foo.bar,12345): Name or service not known
chardev: opening backend "socket" failed
$ qemu-system-x86_64 -monitor tcp:localhost:443,server=on
inet_listen_opts: bind(ipv4,127.0.0.1,443): Permission denied
inet_listen_opts: FAILED
chardev: opening backend "socket" failed
After:
$ x86_64-softmmu/qemu-system-x86_64 -monitor tcp:localhost:6000
x86_64-softmmu/qemu-system-x86_64: -monitor tcp:localhost:6000: Failed to connect to socket: Connection refused
chardev: opening backend "socket" failed
$ x86_64-softmmu/qemu-system-x86_64 -monitor tcp:foo.bar:12345
qemu-system-x86_64: -monitor tcp:foo.bar:12345: address resolution failed for foo.bar:12345: Name or service not known
chardev: opening backend "socket" failed
$ x86_64-softmmu/qemu-system-x86_64 -monitor tcp:localhost:443,server=on
qemu-system-x86_64: -monitor tcp:localhost:443,server=on: Failed to bind socket: Permission denied
chardev: opening backend "socket" failed
Reviewed-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
+17
-6
@@ -2097,12 +2097,13 @@ static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
|
||||
{
|
||||
CharDriverState *chr = NULL;
|
||||
NetCharDriver *s = NULL;
|
||||
Error *local_err = NULL;
|
||||
int fd = -1;
|
||||
|
||||
chr = g_malloc0(sizeof(CharDriverState));
|
||||
s = g_malloc0(sizeof(NetCharDriver));
|
||||
|
||||
fd = inet_dgram_opts(opts, NULL);
|
||||
fd = inet_dgram_opts(opts, &local_err);
|
||||
if (fd < 0) {
|
||||
fprintf(stderr, "inet_dgram_opts failed\n");
|
||||
goto return_err;
|
||||
@@ -2118,6 +2119,10 @@ static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
|
||||
return chr;
|
||||
|
||||
return_err:
|
||||
if (local_err) {
|
||||
qerror_report_err(local_err);
|
||||
error_free(local_err);
|
||||
}
|
||||
g_free(chr);
|
||||
g_free(s);
|
||||
if (fd >= 0) {
|
||||
@@ -2428,6 +2433,7 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts *opts)
|
||||
{
|
||||
CharDriverState *chr = NULL;
|
||||
TCPCharDriver *s = NULL;
|
||||
Error *local_err = NULL;
|
||||
int fd = -1;
|
||||
int is_listen;
|
||||
int is_waitconnect;
|
||||
@@ -2448,15 +2454,15 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts *opts)
|
||||
|
||||
if (is_unix) {
|
||||
if (is_listen) {
|
||||
fd = unix_listen_opts(opts, NULL);
|
||||
fd = unix_listen_opts(opts, &local_err);
|
||||
} else {
|
||||
fd = unix_connect_opts(opts, NULL, NULL, NULL);
|
||||
fd = unix_connect_opts(opts, &local_err, NULL, NULL);
|
||||
}
|
||||
} else {
|
||||
if (is_listen) {
|
||||
fd = inet_listen_opts(opts, 0, NULL);
|
||||
fd = inet_listen_opts(opts, 0, &local_err);
|
||||
} else {
|
||||
fd = inet_connect_opts(opts, NULL, NULL, NULL);
|
||||
fd = inet_connect_opts(opts, &local_err, NULL, NULL);
|
||||
}
|
||||
}
|
||||
if (fd < 0) {
|
||||
@@ -2517,8 +2523,13 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts *opts)
|
||||
return chr;
|
||||
|
||||
fail:
|
||||
if (fd >= 0)
|
||||
if (local_err) {
|
||||
qerror_report_err(local_err);
|
||||
error_free(local_err);
|
||||
}
|
||||
if (fd >= 0) {
|
||||
closesocket(fd);
|
||||
}
|
||||
g_free(s);
|
||||
g_free(chr);
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user