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 | 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 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: Serious problem with base 7.0.4 on Windows |
From: | Hitesh Dhola via Tech-talk <tech-talk at aps.anl.gov> |
To: | tech-talk <tech-talk at aps.anl.gov> |
Date: | Mon, 22 Jun 2020 15:17:59 +0530 (IST) |
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