qemu-devel
[Top][All Lists]
Advanced

[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

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]