v2: - refactor is_blocking_addr(); - rename is_blocking_addr() -> should_track_conflicts_for_addr(); - set v6only in the caller and pass as input parameter; - use mem_alloc() and don't call fatal_error() on allocation failure; - add the test with setting SO_REUSEADDR on the on the second socket back (that was the only case test_soreuseaddr() was testing before my changes), also check error code in that test.
I am also attaching a Windows test program with illustrates the issue which the patchset is here (wait time is ~60sec without the patches most of the time here).
[win.c](/uploads/8226a5762ed3ebf5888c1bc5d08f2a74/win.c)