Kai Blin : ws2_32: Implement SO_EXCLUSIVEADDRUSE for setsockopt.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Nov 30 13:40:55 CST 2006


Module: wine
Branch: master
Commit: e521ee2cee4b78df85a25eb6e56dffbf94a93eed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e521ee2cee4b78df85a25eb6e56dffbf94a93eed

Author: Kai Blin <kai.blin at gmail.com>
Date:   Thu Nov 30 13:27:02 2006 +0100

ws2_32: Implement SO_EXCLUSIVEADDRUSE for setsockopt.

---

 dlls/ws2_32/socket.c |    9 +++++++++
 include/winsock.h    |    2 ++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 5b940c3..eed2c67 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2729,6 +2729,15 @@ int WINAPI WS_setsockopt(SOCKET s, int l
         return 0;
     }
 
+    /* SO_EXCLUSIVEADDRUSE stops applications from binding to a port that is
+     * already used. This never works on Unix systems, so just ignore this
+     * setting*/
+    if ( level == WS_SOL_SOCKET && optname == WS_SO_EXCLUSIVEADDRUSE )
+    {
+        TRACE("Ignoring SO_EXCLUSIVEADDRUSE\n");
+        return 0;
+    }
+
 #ifdef HAVE_IPX
     if(level == NSPROTO_IPX)
     {
diff --git a/include/winsock.h b/include/winsock.h
index 9d5165b..d31c84d 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -663,6 +663,7 @@ typedef struct WS(WSAData)
 #define SO_DEBUG                   0x0001
 #define SO_ACCEPTCONN              0x0002
 #define SO_REUSEADDR               0x0004
+#define SO_EXCLUSIVEADDRUSE        ((u_int)(~SO_REUSEADDR))
 #define SO_KEEPALIVE               0x0008
 #define SO_DONTROUTE               0x0010
 #define SO_BROADCAST               0x0020
@@ -696,6 +697,7 @@ typedef struct WS(WSAData)
 #define WS_SO_DEBUG                0x0001
 #define WS_SO_ACCEPTCONN           0x0002
 #define WS_SO_REUSEADDR            0x0004
+#define WS_SO_EXCLUSIVEADDRUSE     ((WS_u_int)(~WS_SO_REUSEADDR))
 #define WS_SO_KEEPALIVE            0x0008
 #define WS_SO_DONTROUTE            0x0010
 #define WS_SO_BROADCAST            0x0020




More information about the wine-cvs mailing list