If a socket is closed it may remain in TIME_WAIT state for some time. On most operating systems the local port of the connection or socket may not be reeused 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 may result in undefined behaviour. Fix this issue by no setting SO_REUSEADDR on windows.
Signed-off-by: Sebastian Ottlik <ott...@fzi.de> --- gdbstub.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 2b7f22b..3d60acf 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1565,8 +1565,10 @@ static int gdbserver_open(int port) #endif /* allow fast reuse */ +#ifndef _WIN32 val = 1; qemu_setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); +#endif sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(port); -- 1.7.9.5