On Mon, Sep 16, 2013 at 04:23:44PM +0200, Sebastian Ottlik wrote: > This patchset disables most uses of SO_REUSEADDR on Windows and replaces it > with > calls to the new function socket_set_fast_reuse. On Windows systems the > default > behaviour is equivalent to SO_REUSEADDR on other operating systems. > SO_REUSEADDR > can still be set but results in undesired behaviour in most cases. It may even > lead to situations were system behaviour is unspecified. More information on > this can be found at: > http://msdn.microsoft.com/en-us/library/windows/desktop/ms740621.aspx > > I originally encountered this issue when accidentally launching two QEMU > instances with identical GDB ports at the same time. In which case QEMU won't > fail as one might expect. > > Note that patch #4 fails checkpatch.pl. This is intentional (see v3 changes). > > v5 Changes: > - Fixed inverted silent flag on all call sites of socket_set_fast_reuse > > v4 Changes: > - Added the silent flag to socket_set_fast_reuse controlling error reporting > One location where SO_REUSEADDR was set would report errors if setting the > option failed. Keeping the reporting code there would be somewhat unclean, > so > I moved it to socket_set_fast_reuse. A side effect of this was that the > error > reporting was added for all locations that now use socket_set_fast_reuse. > Here > a new flag is added to control error reporting, which means this patchset > won't change QEMU behaviour (except for not setting SO_REUSEADDR on > Windows). > > - Fixed a commit message typo > > - Rebased to current master (2d1fe1873a984d1c2c89ffa3d12949cafc718551). > > v3 Changes: > - Fixed coding style issues. > According to checkpatch.pl patch #4 still introduces style errors as tabs > are > used instead of space for some indentation. I keept the tabs to stay > consistent with the sourrounding code, as tabs seem to be used consitently > in > parts (all?) of the slirp code. > > - Changed patch #3 to keep SO_REUSEADDR for multicast sockets on windows and > added an explainatory comment. > > - Rebased to current master (94c2b6aff43cdfcfdfb552773a6b6b973a72ef0b). > > v2 Changes: > > - Introduce a function with os specific implementation instead of using #ifdef > I named it socket_set_fast_reuse instead of the suggested qemu_set_reuseaddr > so the name better reflects what the function actually does. > > gdbstub.c | 6 ++---- > include/qemu/sockets.h | 1 + > net/socket.c | 18 ++++++++++-------- > slirp/misc.c | 3 +-- > slirp/socket.c | 4 +--- > slirp/tcp_subr.c | 6 ++---- > slirp/udp.c | 4 ++-- > util/oslib-posix.c | 14 ++++++++++++++ > util/oslib-win32.c | 10 ++++++++++ > util/qemu-sockets.c | 6 +++--- > 10 files changed, 46 insertions(+), 26 deletions(-) > > util: add socket_set_fast_reuse function which will > gdbstub: call socket_set_fast_reuse instead of > net: call socket_set_fast_reuse instead of setting > slirp: call socket_set_fast_reuse instead of setting > util: call socket_set_fast_reuse instead of setting >
Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com>