[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v1 03/16] sockets: allow port to be NULL when listen
From: |
Daniel P. Berrange |
Subject: |
[Qemu-devel] [PATCH v1 03/16] sockets: allow port to be NULL when listening on IP address |
Date: |
Fri, 18 Sep 2015 14:18:57 +0100 |
If the port in the SocketAddress struct is NULL, it can allow
the kernel to automatically select a free port. This is useful
in particular in unit tests to avoid a race trying to find a
free port to run a test case on.
Signed-off-by: Daniel P. Berrange <address@hidden>
---
util/qemu-sockets.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 9cc5bee..f9d2f6e 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -128,12 +128,15 @@ int inet_listen_opts(QemuOpts *opts, int port_offset,
Error **errp)
ai.ai_family = PF_UNSPEC;
ai.ai_socktype = SOCK_STREAM;
- if ((qemu_opt_get(opts, "host") == NULL) ||
- (qemu_opt_get(opts, "port") == NULL)) {
- error_setg(errp, "host and/or port not specified");
+ if ((qemu_opt_get(opts, "host") == NULL)) {
+ error_setg(errp, "host not specified");
return -1;
}
- pstrcpy(port, sizeof(port), qemu_opt_get(opts, "port"));
+ if (qemu_opt_get(opts, "port") != NULL) {
+ pstrcpy(port, sizeof(port), qemu_opt_get(opts, "port"));
+ } else {
+ port[0] = '\0';
+ }
addr = qemu_opt_get(opts, "host");
to = qemu_opt_get_number(opts, "to", 0);
@@ -145,6 +148,10 @@ int inet_listen_opts(QemuOpts *opts, int port_offset,
Error **errp)
/* lookup */
if (port_offset) {
unsigned long long baseport;
+ if (strlen(port) == 0) {
+ error_setg(errp, "port not specified");
+ return -1;
+ }
if (parse_uint_full(port, &baseport, 10) < 0) {
error_setg(errp, "can't convert to a number: %s", port);
return -1;
@@ -156,7 +163,8 @@ int inet_listen_opts(QemuOpts *opts, int port_offset, Error
**errp)
}
snprintf(port, sizeof(port), "%d", (int)baseport + port_offset);
}
- rc = getaddrinfo(strlen(addr) ? addr : NULL, port, &ai, &res);
+ rc = getaddrinfo(strlen(addr) ? addr : NULL,
+ strlen(port) ? port : NULL, &ai, &res);
if (rc != 0) {
error_setg(errp, "address resolution failed for %s:%s: %s", addr, port,
gai_strerror(rc));
--
2.4.3
- [Qemu-devel] [PATCH v1 08/16] io: add helper module for creating watches on FDs, (continued)
- [Qemu-devel] [PATCH v1 08/16] io: add helper module for creating watches on FDs, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 11/16] io: add QIOChannelSocket class, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 04/16] ui: convert VNC startup code to use SocketAddress, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 06/16] coroutine: move into libqemuutil.a library, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 09/16] io: pull Buffer code out of VNC module, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 03/16] sockets: allow port to be NULL when listening on IP address,
Daniel P. Berrange <=
- [Qemu-devel] [PATCH v1 01/16] sockets: add helpers for creating SocketAddress from a socket, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 15/16] io: add QIOChannelCommand class, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 13/16] io: add QIOChannelTLS class, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 12/16] io: add QIOChannelFile class, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 05/16] osdep: add qemu_fork() wrapper for safely handling signals, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 02/16] sockets: move qapi_copy_SocketAddress into qemu-sockets.c, Daniel P. Berrange, 2015/09/18
- [Qemu-devel] [PATCH v1 14/16] io: add QIOChannelWebsock class, Daniel P. Berrange, 2015/09/18
- Re: [Qemu-devel] [PATCH v1 00/16] Introduce I/O channels framework, Paolo Bonzini, 2015/09/22