Message ID | 20120305100347.3595.17996.stgit@dhcp-8-167.nay.redhat.com |
---|---|
State | Superseded |
Headers | show |
On 03/05/2012 12:03 PM, Amos Kong wrote: > Use tcp_client_start() in those two functions: > tcp_start_outgoing_migration() > net_socket_connect_init() > > Signed-off-by: Amos Kong <akong@redhat.com> > --- > migration-tcp.c | 41 +++++++++++++---------------------------- > net/socket.c | 41 +++++++++++------------------------------ > 2 files changed, 24 insertions(+), 58 deletions(-) > > diff --git a/migration-tcp.c b/migration-tcp.c > index ecadd10..4f89bff 100644 > --- a/migration-tcp.c > +++ b/migration-tcp.c > @@ -81,43 +81,28 @@ 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; > - } > + int fd; > > 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, &fd); > + s->fd = fd; you don't need fd you can pass s->fd to the function. Orit > + 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 (ret != -EINVAL) { > + 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..b7cd8ec 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 -1; > + } else { > + connected = 1; > } > + > s = net_socket_fd_init(vlan, model, name, fd, connected); > if (!s) > return -1; > >
diff --git a/migration-tcp.c b/migration-tcp.c index ecadd10..4f89bff 100644 --- a/migration-tcp.c +++ b/migration-tcp.c @@ -81,43 +81,28 @@ 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; - } + int fd; 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, &fd); + s->fd = 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 (ret != -EINVAL) { + 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..b7cd8ec 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 -1; + } else { + connected = 1; } + s = net_socket_fd_init(vlan, model, name, fd, connected); if (!s) return -1;
Use tcp_client_start() in those two functions: tcp_start_outgoing_migration() net_socket_connect_init() Signed-off-by: Amos Kong <akong@redhat.com> --- migration-tcp.c | 41 +++++++++++++---------------------------- net/socket.c | 41 +++++++++++------------------------------ 2 files changed, 24 insertions(+), 58 deletions(-)