From mboxrd@z Thu Jan 1 00:00:00 1970 From: Amos Kong Subject: [PATCH v3 4/9] net: use tcp_client_start for tcp client creation Date: Wed, 07 Mar 2012 06:48:12 +0800 Message-ID: <20120306224812.24264.44832.stgit@dhcp-8-167.nay.redhat.com> References: <20120306224330.24264.9494.stgit@dhcp-8-167.nay.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit To: aliguori@us.ibm.com, kvm@vger.kernel.org, quintela@redhat.com, jasowang@redhat.com, qemu-devel@nongnu.org, owasserm@redhat.com, laine@redhat.com Return-path: Received: from mx1.redhat.com ([209.132.183.28]:58640 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1031507Ab2CFWsS (ORCPT ); Tue, 6 Mar 2012 17:48:18 -0500 In-Reply-To: <20120306224330.24264.9494.stgit@dhcp-8-167.nay.redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Use tcp_client_start() in those two functions: tcp_start_outgoing_migration() net_socket_connect_init() Changes from v2: - return real error in net_socket_connect_init(), not always -1 Signed-off-by: Amos Kong --- migration-tcp.c | 39 +++++++++++---------------------------- net/socket.c | 43 ++++++++++++------------------------------- 2 files changed, 23 insertions(+), 59 deletions(-) diff --git a/migration-tcp.c b/migration-tcp.c index ecadd10..b74be1c 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -81,43 +81,26 @@ static void tcp_wait_for_connect(void *opaque) int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) { - struct sockaddr_in addr; int ret; - ret = parse_host_port(&addr, host_port); - if (ret < 0) { - return ret; - } - s->get_error = socket_errno; s->write = socket_write; s->close = tcp_close; - s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); - if (s->fd == -1) { - DPRINTF("Unable to open socket"); - return -socket_error(); - } - - socket_set_nonblock(s->fd); - - do { - ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); - if (ret == -1) { - ret = -socket_error(); - } - if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { - qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); - return 0; - } - } while (ret == -EINTR); - - if (ret < 0) { + ret = tcp_client_start(host_port, &s->fd); + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { + DPRINTF("connect in progress"); + qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); + } else if (ret < 0) { DPRINTF("connect failed\n"); - migrate_fd_error(s); + if (s->fd != -1) { + migrate_fd_error(s); + } return ret; + } else { + migrate_fd_connect(s); } - migrate_fd_connect(s); + return 0; } diff --git a/net/socket.c b/net/socket.c index 5feb3d2..0ecbc84 100644 --- a/net/socket.c +++ b/net/socket.c @@ -434,41 +434,22 @@ static int net_socket_connect_init(VLANState *vlan, const char *host_str) { NetSocketState *s; - int fd, connected, ret, err; + int fd, connected, ret; struct sockaddr_in saddr; - if (parse_host_port(&saddr, host_str) < 0) - return -1; - - fd = qemu_socket(PF_INET, SOCK_STREAM, 0); - if (fd < 0) { - perror("socket"); - return -1; - } - socket_set_nonblock(fd); - - connected = 0; - for(;;) { - ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr)); - if (ret < 0) { - err = socket_error(); - if (err == EINTR || err == EWOULDBLOCK) { - } else if (err == EINPROGRESS) { - break; + ret = tcp_client_start(host_str, &fd); + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { + connected = 0; #ifdef _WIN32 - } else if (err == WSAEALREADY || err == WSAEINVAL) { - break; + } else if (ret == -WSAEALREADY || ret == -WSAEINVAL) { + connected = 0; #endif - } else { - perror("connect"); - closesocket(fd); - return -1; - } - } else { - connected = 1; - break; - } + } else if (ret < 0) { + return ret; + } else { + connected = 1; } + s = net_socket_fd_init(vlan, model, name, fd, connected); if (!s) return -1; @@ -621,7 +602,7 @@ int net_init_socket(QemuOpts *opts, connect = qemu_opt_get(opts, "connect"); - if (net_socket_connect_init(vlan, "socket", name, connect) == -1) { + if (net_socket_connect_init(vlan, "socket", name, connect) < 0) { return -1; } } else if (qemu_opt_get(opts, "mcast")) { From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44495) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S53B5-0002iZ-09 for qemu-devel@nongnu.org; Tue, 06 Mar 2012 17:48:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S53B3-0005ip-5f for qemu-devel@nongnu.org; Tue, 06 Mar 2012 17:48:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42398) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S53B2-0005iT-Tw for qemu-devel@nongnu.org; Tue, 06 Mar 2012 17:48:17 -0500 From: Amos Kong Date: Wed, 07 Mar 2012 06:48:12 +0800 Message-ID: <20120306224812.24264.44832.stgit@dhcp-8-167.nay.redhat.com> In-Reply-To: <20120306224330.24264.9494.stgit@dhcp-8-167.nay.redhat.com> References: <20120306224330.24264.9494.stgit@dhcp-8-167.nay.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH v3 4/9] net: use tcp_client_start for tcp client creation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: aliguori@us.ibm.com, kvm@vger.kernel.org, quintela@redhat.com, jasowang@redhat.com, qemu-devel@nongnu.org, owasserm@redhat.com, laine@redhat.com Use tcp_client_start() in those two functions: tcp_start_outgoing_migration() net_socket_connect_init() Changes from v2: - return real error in net_socket_connect_init(), not always -1 Signed-off-by: Amos Kong --- migration-tcp.c | 39 +++++++++++---------------------------- net/socket.c | 43 ++++++++++++------------------------------- 2 files changed, 23 insertions(+), 59 deletions(-) diff --git a/migration-tcp.c b/migration-tcp.c index ecadd10..b74be1c 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -81,43 +81,26 @@ static void tcp_wait_for_connect(void *opaque) int tcp_start_outgoing_migration(MigrationState *s, const char *host_port) { - struct sockaddr_in addr; int ret; - ret = parse_host_port(&addr, host_port); - if (ret < 0) { - return ret; - } - s->get_error = socket_errno; s->write = socket_write; s->close = tcp_close; - s->fd = qemu_socket(PF_INET, SOCK_STREAM, 0); - if (s->fd == -1) { - DPRINTF("Unable to open socket"); - return -socket_error(); - } - - socket_set_nonblock(s->fd); - - do { - ret = connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)); - if (ret == -1) { - ret = -socket_error(); - } - if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { - qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); - return 0; - } - } while (ret == -EINTR); - - if (ret < 0) { + ret = tcp_client_start(host_port, &s->fd); + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { + DPRINTF("connect in progress"); + qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s); + } else if (ret < 0) { DPRINTF("connect failed\n"); - migrate_fd_error(s); + if (s->fd != -1) { + migrate_fd_error(s); + } return ret; + } else { + migrate_fd_connect(s); } - migrate_fd_connect(s); + return 0; } diff --git a/net/socket.c b/net/socket.c index 5feb3d2..0ecbc84 100644 --- a/net/socket.c +++ b/net/socket.c @@ -434,41 +434,22 @@ static int net_socket_connect_init(VLANState *vlan, const char *host_str) { NetSocketState *s; - int fd, connected, ret, err; + int fd, connected, ret; struct sockaddr_in saddr; - if (parse_host_port(&saddr, host_str) < 0) - return -1; - - fd = qemu_socket(PF_INET, SOCK_STREAM, 0); - if (fd < 0) { - perror("socket"); - return -1; - } - socket_set_nonblock(fd); - - connected = 0; - for(;;) { - ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr)); - if (ret < 0) { - err = socket_error(); - if (err == EINTR || err == EWOULDBLOCK) { - } else if (err == EINPROGRESS) { - break; + ret = tcp_client_start(host_str, &fd); + if (ret == -EINPROGRESS || ret == -EWOULDBLOCK) { + connected = 0; #ifdef _WIN32 - } else if (err == WSAEALREADY || err == WSAEINVAL) { - break; + } else if (ret == -WSAEALREADY || ret == -WSAEINVAL) { + connected = 0; #endif - } else { - perror("connect"); - closesocket(fd); - return -1; - } - } else { - connected = 1; - break; - } + } else if (ret < 0) { + return ret; + } else { + connected = 1; } + s = net_socket_fd_init(vlan, model, name, fd, connected); if (!s) return -1; @@ -621,7 +602,7 @@ int net_init_socket(QemuOpts *opts, connect = qemu_opt_get(opts, "connect"); - if (net_socket_connect_init(vlan, "socket", name, connect) == -1) { + if (net_socket_connect_init(vlan, "socket", name, connect) < 0) { return -1; } } else if (qemu_opt_get(opts, "mcast")) {