]> git.meshlink.io Git - catta/commitdiff
work around picky SO_REUSEADDR semantics on Windows
authorSven M. Hallberg <pesco@khjk.org>
Wed, 3 Sep 2014 12:50:44 +0000 (14:50 +0200)
committerSven M. Hallberg <pesco@khjk.org>
Wed, 3 Sep 2014 12:50:44 +0000 (14:50 +0200)
src/socket.c

index cfb3b7d1f85194edac1818c37fad5ed7ff5e5461..4145899da040887ae10cd5a84589ed0d874923bc 100644 (file)
@@ -191,6 +191,16 @@ static int bind_with_warn(int fd, const struct sockaddr *sa, socklen_t l) {
     assert(sa);
     assert(l > 0);
 
+#ifdef _WIN32
+    // Windows does not allow address reuse when SO_REUSEADDR was set after
+    // bind() on the first socket, so we must set it before.
+    // Note that this spoils the detection trickery below and the warning will
+    // not be logged.
+
+    if (reuseaddr(fd) < 0)
+        return -1;
+#endif
+
     if (bind(fd, sa, l) < 0) {
 
         if (errno != EADDRINUSE) {