[Qemu-devel] [PATCH v3 4/5] slirp: call socket_set_fast_reuse instead of setting SO_REUSEADDR

2013-09-10 Thread Sebastian Ottlik
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 ott...@fzi.de
---
 slirp/misc.c |3 +--
 slirp/socket.c   |4 +---
 slirp/tcp_subr.c |6 ++
 slirp/udp.c  |4 ++--
 4 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index c0d4899..6c1636f 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -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);
diff --git a/slirp/socket.c b/slirp/socket.c
index 25d60e7..37ac5cf 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -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 */
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 043f28f..7571c5a 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -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);
diff --git a/slirp/udp.c b/slirp/udp.c
index b105f87..8cc6cb6 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -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;
-- 
1.7.9.5




Re: [Qemu-devel] [PATCH v3 4/5] slirp: call socket_set_fast_reuse instead of setting SO_REUSEADDR

2013-09-10 Thread Eric Blake
On 09/10/2013 07:26 AM, Sebastian Ottlik wrote:
 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 ott...@fzi.de
 ---
  slirp/misc.c |3 +--
  slirp/socket.c   |4 +---
  slirp/tcp_subr.c |6 ++
  slirp/udp.c  |4 ++--
  4 files changed, 6 insertions(+), 11 deletions(-)
 
 diff --git a/slirp/misc.c b/slirp/misc.c
 index c0d4899..6c1636f 100644
 --- a/slirp/misc.c
 +++ b/slirp/misc.c
 @@ -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);

Here's a case where the old code didn't care about failure, but the code
in 1/5 results in a message via perror().  If that is intentional, it's
best to mention it in the commit message.

-- 
Eric Blake   eblake redhat com+1-919-301-3266
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature