util: call socket_set_fast_reuse instead of setting SO_REUSEADDR

SO_REUSEADDR should be avoided on Windows but is desired on other operating
systems. So instead of setting it we call socket_set_fast_reuse that will result
in the appropriate behaviour on all operating systems.

Signed-off-by: Sebastian Ottlik <ottlik@fzi.de>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
This commit is contained in:
Sebastian Ottlik 2013-10-02 12:23:16 +02:00 committed by Stefan Weil
parent aad1239a7e
commit 04fd1c7896

View File

@ -155,7 +155,7 @@ int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp)
continue; continue;
} }
qemu_setsockopt(slisten, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); socket_set_fast_reuse(slisten);
#ifdef IPV6_V6ONLY #ifdef IPV6_V6ONLY
if (e->ai_family == PF_INET6) { if (e->ai_family == PF_INET6) {
/* listen on both ipv4 and ipv6 */ /* listen on both ipv4 and ipv6 */
@ -274,7 +274,7 @@ static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,
error_set_errno(errp, errno, QERR_SOCKET_CREATE_FAILED); error_set_errno(errp, errno, QERR_SOCKET_CREATE_FAILED);
return -1; return -1;
} }
qemu_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); socket_set_fast_reuse(sock);
if (connect_state != NULL) { if (connect_state != NULL) {
qemu_set_nonblock(sock); qemu_set_nonblock(sock);
} }
@ -455,7 +455,7 @@ int inet_dgram_opts(QemuOpts *opts, Error **errp)
error_set_errno(errp, errno, QERR_SOCKET_CREATE_FAILED); error_set_errno(errp, errno, QERR_SOCKET_CREATE_FAILED);
goto err; goto err;
} }
qemu_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); socket_set_fast_reuse(sock);
/* bind socket */ /* bind socket */
if (bind(sock, local->ai_addr, local->ai_addrlen) < 0) { if (bind(sock, local->ai_addr, local->ai_addrlen) < 0) {