From: Gerd Hoffmann <kraxel@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org, Reinhard Max <max@suse.de>
Subject: Re: [Qemu-devel] Patch to improve handling of server sockets
Date: Tue, 04 May 2010 23:47:58 +0200 [thread overview]
Message-ID: <4BE0960E.5000407@redhat.com> (raw)
In-Reply-To: <4BE049F5.6050105@codemonkey.ws>
On 05/04/10 18:23, Anthony Liguori wrote:
> On 05/04/2010 08:49 AM, Reinhard Max wrote:
>> Hi,
>>
>> I am maintaining the tightvnc package for openSUSE and was recently
>> confronted with an alleged vnc problem with QWMU that turned out to be
>> a shortcoming in QEMU's code for handling TCP server sockets, which is
>> used by the vnc and char modules.
>>
>> The problem occurs when the address to listen on is given as a name
>> which resolves to multiple IP addresses the most prominent example
>> being "localhost" resolving to 127.0.0.1 and ::1 .
My tigervnc (tightvnc successor) has IPv6 support and handles this just
fine. There is also the option to force qemu to listen on ipv4 (or
ipv6) only.
>> The existing code stopped walking the list of addresses returned by
>> getaddrinfo() as soon as one socket was successfully opened and bound.
>> The result was that a qemu instance started with "-vnc localhost:42"
>> only listened on ::1, wasn't reachable through 127.0.0.1. The fact
>> that the code set the IPV6_V6ONLY socket option didn't help, because
>> that option only works when the socket gets bound to the IPv6 wildcard
>> address (::), but is useless for explicit address bindings.
Indeed.
> But that said, I'm not sure we're doing the wrong thing right now. Gerd,
> what do you think about this behavior?
Reinhard is correct. If a hostname resolves to multiple addresses like
this ...
zweiblum kraxel ~# host zweiblum
zweiblum.home.kraxel.org has address 192.168.2.101
zweiblum.home.kraxel.org has IPv6 address
2001:6f8:1cb3:2:216:41ff:fee1:3d40
... qemu should listen on all addresses returned. Which in turn
requires multiple listening sockets.
Changing this is a big deal though, thats why I've taken the somewhat
unclean shortcut to listen on the first match only when implementing
this. Clients are supposed to try to connect to all addresses returned
by the lookup (and they do if they got IPv6 support), thus this usually
doesn't cause trouble in practice.
When going for multiple listening sockets in qemu we have to figure how
we'll handle this in a number of places as there is no single listening
address any more. Reporting the vnc server address in QMP is one. I'm
sure there are more.
cheers,
Gerd
next prev parent reply other threads:[~2010-05-04 21:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-04 13:49 [Qemu-devel] Patch to improve handling of server sockets Reinhard Max
2010-05-04 16:23 ` Anthony Liguori
2010-05-04 20:44 ` Reinhard Max
2010-05-04 21:47 ` Anthony Liguori
2010-05-04 21:47 ` Gerd Hoffmann [this message]
2010-05-04 21:50 ` Anthony Liguori
2010-05-04 23:28 ` Reinhard Max
2010-05-05 15:01 ` Daniel P. Berrange
2010-05-04 23:42 ` Reinhard Max
2010-05-05 8:53 ` Gerd Hoffmann
2010-05-05 10:42 ` Reinhard Max
2010-05-05 11:04 ` Gerd Hoffmann
2010-05-05 17:14 ` Daniel P. Berrange
2010-05-05 8:29 ` Daniel P. Berrange
2010-05-05 17:44 ` Reinhard Max
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BE0960E.5000407@redhat.com \
--to=kraxel@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=max@suse.de \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).