Files
epics-base/modules/libcom/src/osi/os/default/osdSockAddrReuse.cpp
Michael Davidsaver bf533ac195 win32 epicsSocketEnableAddressUseForDatagramFanout call spec
apparently epicsShareAPI is required on both declaration and definition.
2020-02-14 09:00:49 +00:00

60 lines
1.6 KiB
C++

/*************************************************************************\
* 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
*/
#if defined(__rtems__)
# define __BSD_VISIBLE 1
#endif
#define epicsExportSharedSymbols
#include "osiSock.h"
#include "errlog.h"
epicsShareFunc void epicsShareAPI
epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
{
int yes = true;
int status;
status = setsockopt ( s, SOL_SOCKET, SO_REUSEADDR,
(char *) & yes, sizeof ( yes ) );
if ( status < 0 ) {
errlogPrintf (
"epicsSocketEnableAddressReuseDuringTimeWaitState: "
"unable to set SO_REUSEADDR?\n");
}
}
static
void setfanout(SOCKET s, int opt, const char *optname)
{
int yes = true;
int status;
status = setsockopt ( s, SOL_SOCKET, opt,
(char *) & yes, sizeof ( yes ) );
if ( status < 0 ) {
errlogPrintf (
"epicsSocketEnablePortUseForDatagramFanout: "
"unable to set %s?\n", optname);
}
}
void epicsShareAPI epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
{
#define DOIT(sock, opt) setfanout(sock, opt, #opt)
#ifdef SO_REUSEPORT
DOIT(s, SO_REUSEPORT);
#endif
DOIT(s, SO_REUSEADDR);
#undef DOIT
}