[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 1/5] util: add socket_set_fast_reuse function
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH v3 1/5] util: add socket_set_fast_reuse function which will replace setting SO_REUSEADDR |
Date: |
Tue, 10 Sep 2013 09:56:31 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130805 Thunderbird/17.0.8 |
On 09/10/2013 07:26 AM, Sebastian Ottlik wrote:
> If a socket is closed it remains in TIME_WAIT state for some time. On
> operating
> systems using BSD sockets the endpoint of the socket may not be reused while
> in
> this state unless SO_REUSEADDR was set on the socket. On windows on the other
> hand the default behaviour is to allow reuse (i.e. identical to SO_REUSEADDR
> on
> other operating systems) and setting SO_REUSEADDR on a socket allows it to be
> bound to a endpoint even if the endpoint is already used by another socket
> independently of the other sockets state. This can even result in undefined
> behaviour.
>
> Many sockets used by QEMU should not block the use of their endpoint after
> being
> closed while they are still in TIME_WAIT state. Currently QEMU sets
> SO_REUSEADDR
> for such sockets, which can lead to problems on Windows. This patch introduces
> the function socket_set_fast_reuse that should be used instead of setting
> SO_REUSEADDR and does the right thing on all operating systems.
>
> Signed-off-by: Sebastian Ottlik <address@hidden>
> ---
> +int socket_set_fast_reuse(int fd)
> +{
> + int val = 1, ret;
> +
> + ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
> + (const char *)&val, sizeof(val));
> +
> + if (ret < 0) {
> + perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
> + }
This would be the first use of perror in this file; I'm not sure if that
is the right function, or if there is a better thing to be using (in
fact, returning -1 and letting the client decide whether to issue a
warning may even be better).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
[Qemu-devel] [PATCH v3 3/5] net: call socket_set_fast_reuse instead of setting SO_REUSEADDR, Sebastian Ottlik, 2013/09/10
[Qemu-devel] [PATCH v3 2/5] gdbstub: call socket_set_fast_reuse instead of setting SO_REUSEADDR, Sebastian Ottlik, 2013/09/10
[Qemu-devel] [PATCH v3 4/5] slirp: call socket_set_fast_reuse instead of setting SO_REUSEADDR, Sebastian Ottlik, 2013/09/10
[Qemu-devel] [PATCH v3 5/5] util: call socket_set_fast_reuse instead of setting SO_REUSEADDR, Sebastian Ottlik, 2013/09/10