[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 2/4] Separate inet_connect into inet_connect
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v4 2/4] Separate inet_connect into inet_connect (blocking) and inet_nonblocking_connect |
Date: |
Mon, 24 Sep 2012 11:53:53 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Orit Wasserman <address@hidden> writes:
> No need to add non blocking parameters to the blocking inet_connect
> add block parameter for inet_connect_opts instead of using QemuOpt "block".
>
> Signed-off-by: Orit Wasserman <address@hidden>
> ---
> migration-tcp.c | 2 +-
> nbd.c | 2 +-
> qemu-char.c | 2 +-
> qemu-sockets.c | 31 +++++++++++++++++++++----------
> qemu_socket.h | 30 ++++++++++++++++++++++++++++--
> ui/vnc.c | 2 +-
> 6 files changed, 53 insertions(+), 16 deletions(-)
>
> diff --git a/migration-tcp.c b/migration-tcp.c
> index ac891c3..7f6ad98 100644
> --- a/migration-tcp.c
> +++ b/migration-tcp.c
> @@ -88,7 +88,7 @@ int tcp_start_outgoing_migration(MigrationState *s, const
> char *host_port,
> s->write = socket_write;
> s->close = tcp_close;
>
> - s->fd = inet_connect(host_port, false, &in_progress, errp);
> + s->fd = inet_nonblocking_connect(host_port, &in_progress, errp);
> if (error_is_set(errp)) {
> migrate_fd_error(s);
> return -1;
> diff --git a/nbd.c b/nbd.c
> index 0dd60c5..206f75c 100644
> --- a/nbd.c
> +++ b/nbd.c
> @@ -162,7 +162,7 @@ int tcp_socket_outgoing(const char *address, uint16_t
> port)
>
> int tcp_socket_outgoing_spec(const char *address_and_port)
> {
> - return inet_connect(address_and_port, true, NULL, NULL);
> + return inet_connect(address_and_port, NULL);
> }
>
> int tcp_socket_incoming(const char *address, uint16_t port)
> diff --git a/qemu-char.c b/qemu-char.c
> index 7f0f895..13b87b5 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -2456,7 +2456,7 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts
> *opts)
> if (is_listen) {
> fd = inet_listen_opts(opts, 0, NULL);
> } else {
> - fd = inet_connect_opts(opts, NULL, NULL);
> + fd = inet_connect_opts(opts, true, NULL, NULL);
> }
> }
> if (fd < 0) {
> diff --git a/qemu-sockets.c b/qemu-sockets.c
> index 7ca0ac9..99a1500 100644
> --- a/qemu-sockets.c
> +++ b/qemu-sockets.c
> @@ -54,9 +54,6 @@ static QemuOptsList dummy_opts = {
> },{
> .name = "ipv6",
> .type = QEMU_OPT_BOOL,
> - },{
> - .name = "block",
> - .type = QEMU_OPT_BOOL,
> },
> { /* end if list */ }
> },
> @@ -294,11 +291,11 @@ static struct addrinfo
> *inet_parse_connect_opts(QemuOpts *opts, Error **errp)
> return res;
> }
>
> -int inet_connect_opts(QemuOpts *opts, bool *in_progress, Error **errp)
> +int inet_connect_opts(QemuOpts *opts, bool block, bool *in_progress,
> + Error **errp)
> {
> struct addrinfo *res, *e;
> int sock = -1;
> - bool block = qemu_opt_get_bool(opts, "block", 0);
>
> res = inet_parse_connect_opts(opts, errp);
> if (!res) {
> @@ -515,17 +512,31 @@ int inet_listen(const char *str, char *ostr, int olen,
> return sock;
> }
>
> -int inet_connect(const char *str, bool block, bool *in_progress, Error
> **errp)
> +int inet_connect(const char *str, Error **errp)
> {
> QemuOpts *opts;
> int sock = -1;
>
> opts = qemu_opts_create(&dummy_opts, NULL, 0, NULL);
> if (inet_parse(opts, str) == 0) {
> - if (block) {
> - qemu_opt_set(opts, "block", "on");
> - }
> - sock = inet_connect_opts(opts, in_progress, errp);
> + sock = inet_connect_opts(opts, true, NULL, errp);
> + } else {
> + error_set(errp, QERR_SOCKET_CREATE_FAILED);
> + }
> + qemu_opts_del(opts);
> + return sock;
> +}
> +
> +
> +int inet_nonblocking_connect(const char *str, bool *in_progress,
> + Error **errp)
> +{
> + QemuOpts *opts;
> + int sock = -1;
> +
> + opts = qemu_opts_create(&dummy_opts, NULL, 0, NULL);
> + if (inet_parse(opts, str) == 0) {
> + sock = inet_connect_opts(opts, false, in_progress, errp);
> } else {
> error_set(errp, QERR_SOCKET_CREATE_FAILED);
> }
> diff --git a/qemu_socket.h b/qemu_socket.h
> index 30ae6af..3247fb7 100644
> --- a/qemu_socket.h
> +++ b/qemu_socket.h
> @@ -42,8 +42,34 @@ int send_all(int fd, const void *buf, int len1);
> int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp);
> int inet_listen(const char *str, char *ostr, int olen,
> int socktype, int port_offset, Error **errp);
> -int inet_connect_opts(QemuOpts *opts, bool *in_progress, Error **errp);
> -int inet_connect(const char *str, bool block, bool *in_progress, Error
> **errp);
> +/**
> + * Connect function
> + * Returns -1 in case of error, fd in case of success
> + * @opts: QEMU options
> + * @block: set true for blocking socket
> + * @in_progress: set to true in case of on going connect
ongoing
> + * @errp: set in case of an error
> + **/
We usually tack function comments to the function definition, not the
declaration. Matter of taste. I like it next to the definition,
because that improves the comment's chances to get updated along with
the function.
> +int inet_connect_opts(QemuOpts *opts, bool block, bool *in_progress,
> + Error **errp);
> +/**
> + * Blocking connect
> + * Returns -1 in case of error, fd in case of success
> + * @str: address string
> + * @errp: set in case of an error
> + **/
> +int inet_connect(const char *str, Error **errp);
> +
> +/**
> + * Nonblocking connect
> + * Returns -1 in case of error, fd in case of success
> + * @str: address string
> + * @in_progress: set to true in case of on going connect
ongoing
> + * @errp: set in case of an error
> + **/
> +int inet_nonblocking_connect(const char *str, bool *in_progress,
> + Error **errp);
> +
> int inet_dgram_opts(QemuOpts *opts);
> const char *inet_strfamily(int family);
>
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 385e345..01b2daf 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -3061,7 +3061,7 @@ int vnc_display_open(DisplayState *ds, const char
> *display)
> if (strncmp(display, "unix:", 5) == 0)
> vs->lsock = unix_connect(display+5);
> else
> - vs->lsock = inet_connect(display, true, NULL, NULL);
> + vs->lsock = inet_connect(display, NULL);
> if (-1 == vs->lsock) {
> g_free(vs->display);
> vs->display = NULL;
[Qemu-devel] [PATCH v4 3/4] Fix address handling in inet_nonblocking_connect, Orit Wasserman, 2012/09/23
[Qemu-devel] [PATCH v4 4/4] Clear handler only for valid fd, Orit Wasserman, 2012/09/23