Could it be, that this commit removed the functionality that we need for
Windows ?
commit db6e7c7a22b73f70a8b93e2aa4b6fa505e0218a6
Author: Michael Davidsaver <mdavidsaver at gmail.com>
Date: Wed Feb 5 10:30:58 2020 -0800
use one osdSockAddrReuse impl for all targets
drop win32 specialization of osdSockAddrReuse
After reading
<https://docs.microsoft.com/en-us/windows/win32/winsock/using-so-reuseaddr-and-so-exclusiveaddruse>
it seems clear that there a different understandings what
SO_REUSEADDR should do, compared UNIX - Windows.
Does `git revert db6e7c7a22b73f70a8b93e2` help ?
On 19/06/20 22:40, Mark Rivers via Tech-talk wrote:
Folks,
I just want to give a heads-up that I have found a serious problem in
base 7.0.4 on Windows. Running a single IOC on a computer works fine.
However, additional IOCs started on the same machine cannot be reached
with Channel Access.
I assume there will be a patch release soon. Meanwhile this patch
(actually a new file) will fix the problem.
corvette:local/epics/base-7.0.4>git diff R7.0.4 modules/libcom/
diff --git a/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp
b/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp
new file mode 100644
index 0000000..cc13605
--- /dev/null
+++ b/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp
@@ -0,0 +1,44 @@
+
+/*************************************************************************\
+* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
+* National Laboratory.
+* Copyright (c) 2002 The Regents of the University of California, as
+* Operator of Los Alamos National Laboratory.
+* EPICS BASE Versions 3.13.7
+* and higher are distributed subject to a Software License Agreement found
+* in file LICENSE that is included with this distribution.
+\*************************************************************************/
+
+/*
+ * Author: Jeff Hill
+ */
+
+#define epicsExportSharedSymbols
+#include "osiSock.h"
+#include "errlog.h"
+
+/*
+ * Note: WINSOCK appears to assign a different functionality for
+ * SO_REUSEADDR compared to other OS. With WINSOCK SO_REUSEADDR indicates
+ * that simultaneously servers can bind to the same TCP port on the
same host!
+ * Also, servers are always enabled to reuse a port immediately after
+ * they exit ( even if SO_REUSEADDR isnt set ).
+ */
+LIBCOM_API void epicsStdCall
+ epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
+{
+}
+
+LIBCOM_API void epicsStdCall
+ epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
+{
+ int yes = true;
+ int status;
+ status = setsockopt ( s, SOL_SOCKET, SO_REUSEADDR,
+ (char *) & yes, sizeof ( yes ) );
+ if ( status < 0 ) {
+ errlogPrintf (
+ "epicsSocketEnablePortUseForDatagramFanout: "
+ "unable to set SO_REUSEADDR?\n");
+ }
+}
Mark
- Replies:
- Re: Serious problem with base 7.0.4 on Windows Mark Rivers via Tech-talk
- References:
- Serious problem with base 7.0.4 on Windows Mark Rivers via Tech-talk
- Navigate by Date:
- Prev:
Serious problem with base 7.0.4 on Windows Mark Rivers via Tech-talk
- Next:
Re: Serious problem with base 7.0.4 on Windows Mark Rivers via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Serious problem with base 7.0.4 on Windows Mark Rivers via Tech-talk
- Next:
Re: Serious problem with base 7.0.4 on Windows Mark Rivers via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
|