From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TG9nL-0001UG-7P for qemu-devel@nongnu.org; Mon, 24 Sep 2012 10:38:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TG9nH-0002tq-2R for qemu-devel@nongnu.org; Mon, 24 Sep 2012 10:37:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:31718) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TG9nG-0002tf-Pw for qemu-devel@nongnu.org; Mon, 24 Sep 2012 10:37:55 -0400 Message-ID: <5060701D.7080806@redhat.com> Date: Mon, 24 Sep 2012 16:37:17 +0200 From: Orit Wasserman MIME-Version: 1.0 References: <1348485070-8190-1-git-send-email-owasserm@redhat.com> <20120924143659.GA9971@redhat.com> In-Reply-To: <20120924143659.GA9971@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v5 0/4] non-blocking connect address handling cleanup List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: kwolf@redhat.com, aliguori@us.ibm.com, mdroth@linux.vnet.ibm.com, quintela@redhat.com, armbru@redhat.com, qemu-devel@nongnu.org, lcapitulino@redhat.com, pbonzini@redhat.com, akong@redhat.com On 09/24/2012 04:36 PM, Michael S. Tsirkin wrote: > On Mon, Sep 24, 2012 at 01:11:06PM +0200, Orit Wasserman wrote: >> Changes from v4: >> - Rename ConnectHandler to NonBlockingConnectHandler >> - move function comments to functions definitions >> - move connect_state allocation to outside of the loop >> - fix comments text >> >> Changes from v3: >> - add missing parenthesis QEMU_SOCKET_RC_INPROGRESS macro >> - remove "block" from dummy_opts >> - remove in_progress from external API (inet_connect_opts and >> inet_nonblocking_connect) >> - Allocate ConnectState inside inet_connect_opts, this make the >> structure internal to qemu-sockets.c >> - fix migrate_fd_cleanup to handle invalid fd. >> >> Changes from v2: >> - remove the use of getnameinfo >> - remove errp for inet_connect_addr >> - remove QemuOpt "block" >> - fix errors in wait_for_connect >> - pass ConnectState as a parameter to allow concurrent connect ops >> >> getaddrinfo can give us a list of addresses, but we only try to >> connect to the first one. If that fails we never proceed to >> the next one. This is common on desktop setups that often have ipv6 >> configured but not actually working. >> A simple way to reproduce the problem is migration: >> for the destination use -incoming tcp:0:4444, run migrate -d tcp:localhost:4444 >> migration will fail on hosts that have both IPv4 and IPV6 address for localhost. >> >> To fix this, refactor address resolution code and make inet_nonblocking_connect >> retry connection with a different address. > > Acked-by: Michael S. Tsirkin > > More ideas if you feel like touching this code some more: > - fix listen side: drop ADDRCONF hint and ideally make > it address independent > - enhance error handling so async connect errors propagate to > monitor somehow I working on the second :) > >> Michael S. Tsirkin (1): >> Refactor inet_connect_opts function >> >> Orit Wasserman (3): >> Separate inet_connect into inet_connect (blocking) and >> inet_nonblocking_connect >> Fix address handling in inet_nonblocking_connect >> Clear handler only for valid fd >> >> migration-tcp.c | 37 ++------ >> migration.c | 4 +- >> nbd.c | 2 +- >> qemu-char.c | 2 +- >> qemu-sockets.c | 279 +++++++++++++++++++++++++++++++++++++++++-------------- >> qemu_socket.h | 15 +++- >> ui/vnc.c | 2 +- >> 7 files changed, 237 insertions(+), 104 deletions(-) >> >> -- >> 1.7.7.6