]> git.proxmox.com Git - qemu.git/commitdiff
slirp: call socket_set_fast_reuse instead of setting SO_REUSEADDR
authorSebastian Ottlik <ottlik@fzi.de>
Wed, 2 Oct 2013 10:23:15 +0000 (12:23 +0200)
committerStefan Weil <sw@weilnetz.de>
Wed, 2 Oct 2013 17:20:31 +0000 (19:20 +0200)
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>
slirp/misc.c
slirp/socket.c
slirp/tcp_subr.c
slirp/udp.c

index c0d489950a371d8b61d077877f399f12ffe568ce..6c1636f7b6d6acf424cd3e6070f00499c42d408a 100644 (file)
@@ -212,8 +212,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                     so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
                 } while (so->s < 0 && errno == EINTR);
                 closesocket(s);
-                opt = 1;
-                qemu_setsockopt(so->s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));
+                socket_set_fast_reuse(so->s);
                 opt = 1;
                 qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
                qemu_set_nonblock(so->s);
index 25d60e7a89b20bcdf30d0d03beb2db3b6e205e28..37ac5cf2fb260cffbf85b5f4f80b72d0fbcc9053 100644 (file)
@@ -627,9 +627,7 @@ tcp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
        addr.sin_port = hport;
 
        if (((s = qemu_socket(AF_INET,SOCK_STREAM,0)) < 0) ||
-#ifndef _WIN32
-           (qemu_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int)) < 0) ||
-#endif
+           (socket_set_fast_reuse(s) < 0) ||
            (bind(s,(struct sockaddr *)&addr, sizeof(addr)) < 0) ||
            (listen(s,1) < 0)) {
                int tmperrno = errno; /* Don't clobber the real reason we failed */
index 043f28fcaeedf1cb89c40a029fc45f482f7c30a1..7571c5a2820bd25220985883f66b6a1e10198619 100644 (file)
@@ -337,8 +337,7 @@ int tcp_fconnect(struct socket *so)
     struct sockaddr_in addr;
 
     qemu_set_nonblock(s);
-    opt = 1;
-    qemu_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
+    socket_set_fast_reuse(s);
     opt = 1;
     qemu_setsockopt(s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(opt));
 
@@ -426,8 +425,7 @@ void tcp_connect(struct socket *inso)
         return;
     }
     qemu_set_nonblock(s);
-    opt = 1;
-    qemu_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));
+    socket_set_fast_reuse(s);
     opt = 1;
     qemu_setsockopt(s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
     socket_set_nodelay(s);
index b105f871f377a02074c6436a6f62bef5cedc4d32..8cc6cb66da5e5b666402207cb0af06f95efc8971 100644 (file)
@@ -354,7 +354,7 @@ udp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
 {
        struct sockaddr_in addr;
        struct socket *so;
-       socklen_t addrlen = sizeof(struct sockaddr_in), opt = 1;
+       socklen_t addrlen = sizeof(struct sockaddr_in);
 
        so = socreate(slirp);
        if (!so) {
@@ -372,7 +372,7 @@ udp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
                udp_detach(so);
                return NULL;
        }
-       qemu_setsockopt(so->s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));
+       socket_set_fast_reuse(so->s);
 
        getsockname(so->s,(struct sockaddr *)&addr,&addrlen);
        so->so_fport = addr.sin_port;