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: | Serious problem with base 7.0.4 on Windows |
From: | Mark Rivers via Tech-talk <tech-talk at aps.anl.gov> |
To: | 'tech-talk' <tech-talk at aps.anl.gov> |
Date: | Fri, 19 Jun 2020 20:40:55 +0000 |
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 |