diff --git a/configure/CONFIG_SITE b/configure/CONFIG_SITE index 6a94e0f..0e6b629 100644 --- a/configure/CONFIG_SITE +++ b/configure/CONFIG_SITE @@ -32,6 +32,14 @@ ifeq ($(EPICS_HOST_ARCH),linux-x86) USR_LDFLAGS += -lpthread endif +ifeq ($(EPICS_HOST_ARCH),win32-x86) + USR_SYS_LIBS += ws2_32 +endif + +ifeq ($(EPICS_HOST_ARCH),win32-x86-debug) + USR_SYS_LIBS += ws2_32 +endif + INSTALL_INCLUDE = $(INSTALL_LOCATION)/include/pv USR_INCLUDES += -I $(INSTALL_LOCATION)/include diff --git a/configure/RELEASE b/configure/RELEASE index 07381c3..05c28d6 100644 --- a/configure/RELEASE +++ b/configure/RELEASE @@ -26,7 +26,7 @@ TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top # EPICS_BASE usually appears last so other apps can override stuff: -PVDATA=/Users/msekoranja/tmp/pvDataCPP +PVDATA=/opt/epics/pvDataCPP EPICS_BASE=/opt/epics/base #PVDATA=/home/mrk/hg/pvDataCPP diff --git a/pvAccessApp/remote/blockingTCP.h b/pvAccessApp/remote/blockingTCP.h index 8e23337..2fc2dff 100644 --- a/pvAccessApp/remote/blockingTCP.h +++ b/pvAccessApp/remote/blockingTCP.h @@ -207,7 +207,7 @@ namespace epics { static const int MAX_ENSURE_DATA_BUFFER_SIZE = 1024; - static const double _delay = 0.01; + static const double _delay; /****** finally initialized at construction time and after start (called by the same thread) ********/ @@ -864,7 +864,7 @@ namespace epics { * Initialize connection acception. * @return port where server is listening */ - int initialize(in_port_t port); + int initialize(unsigned short port); /** * Validate connection by sending a validation message request. diff --git a/pvAccessApp/remote/blockingTCPAcceptor.cpp b/pvAccessApp/remote/blockingTCPAcceptor.cpp index 625f77f..fc675f5 100644 --- a/pvAccessApp/remote/blockingTCPAcceptor.cpp +++ b/pvAccessApp/remote/blockingTCPAcceptor.cpp @@ -43,7 +43,7 @@ namespace epics { destroy(); } - int BlockingTCPAcceptor::initialize(in_port_t port) { + int BlockingTCPAcceptor::initialize(unsigned short port) { // specified bind address _bindAddress.ia.sin_family = AF_INET; _bindAddress.ia.sin_port = htons(port); @@ -85,7 +85,7 @@ namespace epics { _bindAddress.ia.sin_port = htons(0); } else { - ::close(_serverSocketChannel); + epicsSocketDestroy(_serverSocketChannel); break; // exit while loop } } @@ -94,7 +94,7 @@ namespace epics { // update bind address, if dynamically port selection was used if(ntohs(_bindAddress.ia.sin_port)==0) { - socklen_t sockLen = sizeof(sockaddr); + osiSocklen_t sockLen = sizeof(sockaddr); // read the actual socket info retval = ::getsockname(_serverSocketChannel, &_bindAddress.sa, &sockLen); if(retval<0) { @@ -168,14 +168,14 @@ namespace epics { // enable TCP_NODELAY (disable Nagle's algorithm) int optval = 1; // true - int retval = ::setsockopt(newClient, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(int)); + int retval = ::setsockopt(newClient, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(int)); if(retval<0) { epicsSocketConvertErrnoToString(strBuffer, sizeof(strBuffer)); LOG(logLevelDebug, "Error setting TCP_NODELAY: %s", strBuffer); } // enable TCP_KEEPALIVE - retval = ::setsockopt(newClient, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(int)); + retval = ::setsockopt(newClient, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(int)); if(retval<0) { epicsSocketConvertErrnoToString(strBuffer, sizeof(strBuffer)); LOG(logLevelDebug, "Error setting SO_KEEPALIVE: %s", strBuffer); diff --git a/pvAccessApp/remote/blockingTCPConnector.cpp b/pvAccessApp/remote/blockingTCPConnector.cpp index b7d2e1e..e4c9f0e 100644 --- a/pvAccessApp/remote/blockingTCPConnector.cpp +++ b/pvAccessApp/remote/blockingTCPConnector.cpp @@ -14,7 +14,6 @@ #include #include -#include #include namespace epics { @@ -120,7 +119,7 @@ namespace epics { // enable TCP_NODELAY (disable Nagle's algorithm) int optval = 1; // true int retval = ::setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, - &optval, sizeof(int)); + (char *)&optval, sizeof(int)); if(retval<0) { char errStr[64]; epicsSocketConvertErrnoToString(errStr, sizeof(errStr)); @@ -129,7 +128,7 @@ namespace epics { // enable TCP_KEEPALIVE retval = ::setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, - &optval, sizeof(int)); + (char *)&optval, sizeof(int)); if(retval<0) { char errStr[64]; diff --git a/pvAccessApp/remote/blockingTCPTransport.cpp b/pvAccessApp/remote/blockingTCPTransport.cpp index ece5375..24ee6f3 100644 --- a/pvAccessApp/remote/blockingTCPTransport.cpp +++ b/pvAccessApp/remote/blockingTCPTransport.cpp @@ -5,6 +5,7 @@ * Author: Miha Vitorovic */ +#define __STDC_LIMIT_MACROS 1 #include #include #include @@ -24,10 +25,14 @@ /* standard */ #include -#include #include #include +#ifdef _WIN32 +#include +typedef SSIZE_T ssize_t; +#endif + using namespace epics::pvData; using std::max; @@ -72,6 +77,8 @@ namespace epics { PVDATA_REFCOUNT_MONITOR_DEFINE(blockingTCPTransport); + const double BlockingTCPTransport::_delay = 0.01; + BlockingTCPTransport::BlockingTCPTransport(Context::shared_pointer const & context, SOCKET channel, std::auto_ptr& responseHandler, int receiveBufferSize, int16 priority) : @@ -111,7 +118,7 @@ namespace epics { _verified(false), _markerToSend(0), _totalBytesSent(0), - _remoteBufferFreeSpace(LONG_LONG_MAX) + _remoteBufferFreeSpace(INT64_MAX) { PVDATA_REFCOUNT_MONITOR_CONSTRUCT(blockingTCPTransport); @@ -126,9 +133,9 @@ namespace epics { _maxPayloadSize = _sendBuffer->getSize() - 2*CA_MESSAGE_HEADER_SIZE; // one for header, one for flow control // get send buffer size - socklen_t intLen = sizeof(int); + osiSocklen_t intLen = sizeof(int); - int retval = getsockopt(_channel, SOL_SOCKET, SO_SNDBUF, &_socketSendBufferSize, &intLen); + int retval = getsockopt(_channel, SOL_SOCKET, SO_SNDBUF, (char *)&_socketSendBufferSize, &intLen); if(retval<0) { _socketSendBufferSize = MAX_TCP_RECV; char errStr[64]; @@ -138,7 +145,7 @@ namespace epics { errStr); } - socklen_t saSize = sizeof(sockaddr); + osiSocklen_t saSize = sizeof(sockaddr); retval = getpeername(_channel, &(_socketAddress.sa), &saSize); if(retval<0) { char errStr[64]; @@ -150,7 +157,7 @@ namespace epics { // set receive timeout so that we do not have problems at shutdown (recvfrom would block) struct timeval timeout; - bzero(&timeout, sizeof(struct timeval)); + memset(&timeout, 0, sizeof(struct timeval)); timeout.tv_sec = 1; timeout.tv_usec = 0; @@ -274,9 +281,9 @@ namespace epics { // this DatagramSocket. int sockBufSize; - socklen_t intLen = sizeof(int); + osiSocklen_t intLen = sizeof(int); - int retval = getsockopt(_channel, SOL_SOCKET, SO_RCVBUF,&sockBufSize, &intLen); + int retval = getsockopt(_channel, SOL_SOCKET, SO_RCVBUF, (char *)&sockBufSize, &intLen); if(retval<0) { char errStr[64]; @@ -497,7 +504,7 @@ namespace epics { while(_socketBuffer->getPosition()getPosition(); - ssize_t bytesRead = recv(_channel, (void*)(_socketBuffer->getArray()+pos), + ssize_t bytesRead = recv(_channel, (char*)(_socketBuffer->getArray()+pos), _socketBuffer->getRemaining(), 0); _socketBuffer->setPosition(pos+bytesRead); diff --git a/pvAccessApp/remote/blockingUDPConnector.cpp b/pvAccessApp/remote/blockingUDPConnector.cpp index b901408..ce6b703 100644 --- a/pvAccessApp/remote/blockingUDPConnector.cpp +++ b/pvAccessApp/remote/blockingUDPConnector.cpp @@ -15,7 +15,6 @@ /* standard */ #include -#include using namespace std; @@ -38,7 +37,7 @@ namespace epics { } int optval = _broadcast ? 1 : 0; - int retval = ::setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)); + int retval = ::setsockopt(socket, SOL_SOCKET, SO_BROADCAST, (char *)&optval, sizeof(optval)); if(retval<0) { char errStr[64]; diff --git a/pvAccessApp/remote/blockingUDPTransport.cpp b/pvAccessApp/remote/blockingUDPTransport.cpp index 32c3549..0943378 100644 --- a/pvAccessApp/remote/blockingUDPTransport.cpp +++ b/pvAccessApp/remote/blockingUDPTransport.cpp @@ -24,7 +24,6 @@ /* standard */ #include #include -#include using namespace epics::pvData; using namespace std; @@ -54,7 +53,7 @@ namespace epics { // set receive timeout so that we do not have problems at shutdown (recvfrom would block) struct timeval timeout; - bzero(&timeout, sizeof(struct timeval)); + memset(&timeout, 0, sizeof(struct timeval)); timeout.tv_sec = 1; timeout.tv_usec = 0; @@ -181,9 +180,9 @@ namespace epics { // data ready to be read _receiveBuffer->clear(); - socklen_t addrStructSize = sizeof(sockaddr); + osiSocklen_t addrStructSize = sizeof(sockaddr); - int bytesRead = recvfrom(_channel, (void*)_receiveBuffer->getArray(), + int bytesRead = recvfrom(_channel, (char*)_receiveBuffer->getArray(), _receiveBuffer->getRemaining(), 0, (sockaddr*)&fromAddress, &addrStructSize); @@ -217,6 +216,8 @@ namespace epics { // interrupted or timeout if (socketError == EINTR || socketError == EAGAIN || + // windows times out with this + socketError == SOCK_ETIMEDOUT || socketError == EWOULDBLOCK) continue; @@ -331,9 +332,9 @@ namespace epics { // this DatagramSocket. int sockBufSize = -1; - socklen_t intLen = sizeof(int); + osiSocklen_t intLen = sizeof(int); - int retval = getsockopt(_channel, SOL_SOCKET, SO_RCVBUF, &sockBufSize, &intLen); + int retval = getsockopt(_channel, SOL_SOCKET, SO_RCVBUF, (char *)&sockBufSize, &intLen); if(retval<0) { char errStr[64]; diff --git a/pvAccessApp/remote/channelSearchManager.cpp b/pvAccessApp/remote/channelSearchManager.cpp index 9953109..15c70e9 100644 --- a/pvAccessApp/remote/channelSearchManager.cpp +++ b/pvAccessApp/remote/channelSearchManager.cpp @@ -497,12 +497,12 @@ ChannelSearchManager::ChannelSearchManager(Context* context): maxPeriod = min(maxPeriod, MAX_SEARCH_PERIOD_LOWER_LIMIT); // calculate number of timers to reach maxPeriod (each timer period is doubled) - double powerOfTwo = log(maxPeriod / (double)MIN_RTT) / log(2); + double powerOfTwo = log(maxPeriod / (double)MIN_RTT) / log(2.0); int32 numberOfTimers = (int32)(powerOfTwo + 1); numberOfTimers = min(numberOfTimers, MAX_TIMERS); // calculate beacon anomaly timer index - powerOfTwo = log(BEACON_ANOMALY_SEARCH_PERIOD / (double)MIN_RTT) / log(2); + powerOfTwo = log(BEACON_ANOMALY_SEARCH_PERIOD / (double)MIN_RTT) / log(2.0); _beaconAnomalyTimerIndex = (int32)(powerOfTwo + 1); _beaconAnomalyTimerIndex = min(_beaconAnomalyTimerIndex, numberOfTimers - 1); diff --git a/pvAccessApp/remoteClient/clientContextImpl.cpp b/pvAccessApp/remoteClient/clientContextImpl.cpp index 1bf23f8..d78454c 100644 --- a/pvAccessApp/remoteClient/clientContextImpl.cpp +++ b/pvAccessApp/remoteClient/clientContextImpl.cpp @@ -3414,7 +3414,7 @@ namespace epics { m_needSubscriptionUpdate = true; int count = 0; - ResponseRequest::weak_pointer rrs[m_responseRequests.size()]; + std::vector rrs(m_responseRequests.size()); for (IOIDResponseRequestMap::iterator iter = m_responseRequests.begin(); iter != m_responseRequests.end(); iter++) @@ -3829,7 +3829,7 @@ TODO Lock guard(m_cidMapMutex); int count = 0; - ChannelImpl::weak_pointer channels[m_channelsByCID.size()]; + std::vector channels(m_channelsByCID.size()); for (CIDChannelMap::iterator iter = m_channelsByCID.begin(); iter != m_channelsByCID.end(); iter++) diff --git a/pvAccessApp/server/baseChannelRequester.cpp b/pvAccessApp/server/baseChannelRequester.cpp index 36a511f..60ba5c6 100644 --- a/pvAccessApp/server/baseChannelRequester.cpp +++ b/pvAccessApp/server/baseChannelRequester.cpp @@ -32,7 +32,7 @@ BaseChannelRequester::BaseChannelRequester( } -boolean BaseChannelRequester::startRequest(int32 qos) +bool BaseChannelRequester::startRequest(int32 qos) { Lock guard(_mutex); if (_pendingRequest != NULL_REQUEST) diff --git a/pvAccessApp/server/beaconEmitter.cpp b/pvAccessApp/server/beaconEmitter.cpp index 4e36029..3a7c4b2 100644 --- a/pvAccessApp/server/beaconEmitter.cpp +++ b/pvAccessApp/server/beaconEmitter.cpp @@ -2,6 +2,10 @@ * beaconEmitter.cpp */ +#ifdef _WIN32 +#define NOMINMAX +#endif + #include #include diff --git a/pvAccessApp/utils/inetAddressUtil.cpp b/pvAccessApp/utils/inetAddressUtil.cpp index 27eb580..a07b377 100644 --- a/pvAccessApp/utils/inetAddressUtil.cpp +++ b/pvAccessApp/utils/inetAddressUtil.cpp @@ -22,42 +22,6 @@ #include #include #include -#include -#include -#include - -// since we do not have autoconf -#ifdef darwin -#define HAVE_SOCKADDR_SA_LEN -#endif - -/* - * In newer BSD systems, the socket address is variable-length, and - * there's an "sa_len" field giving the length of the structure; - * this allows socket addresses to be longer than 2 bytes of family - * and 14 bytes of data. - * - * Some commercial UNIXes use the old BSD scheme, some use the RFC 2553 - * variant of the old BSD scheme (with "struct sockaddr_storage" rather - * than "struct sockaddr"), and some use the new BSD scheme. - * - * Some versions of GNU libc use neither scheme, but has an "SA_LEN()" - * macro that determines the size based on the address family. Other - * versions don't have "SA_LEN()" (as it was in drafts of RFC 2553 - * but not in the final version). - * - * We assume that a UNIX that doesn't have "getifaddrs()" and doesn't have - * SIOCGLIFCONF, but has SIOCGIFCONF, uses "struct sockaddr" for the - * address in an entry returned by SIOCGIFCONF. - */ -#ifndef SA_LEN -#ifdef HAVE_SOCKADDR_SA_LEN -#define SA_LEN(addr) ((addr).sa_len) -#else /* HAVE_SOCKADDR_SA_LEN */ -#define SA_LEN(addr) (sizeof (struct sockaddr)) -#endif /* HAVE_SOCKADDR_SA_LEN */ -#endif /* SA_LEN */ - using namespace std; using namespace epics::pvData; @@ -65,7 +29,7 @@ using namespace epics::pvData; namespace epics { namespace pvAccess { - void addDefaultBroadcastAddress(InetAddrVector* v, in_port_t p) { + void addDefaultBroadcastAddress(InetAddrVector* v, unsigned short p) { osiSockAddr pNewNode; pNewNode.ia.sin_family = AF_INET; pNewNode.ia.sin_addr.s_addr = htonl(INADDR_BROADCAST); @@ -73,141 +37,22 @@ namespace epics { v->push_back(pNewNode); } - // TODO use osiSockDiscoverBroadcastAddresses() from epics/base/src/libCom/osi/os/default/osdNetIntf.c - InetAddrVector* getBroadcastAddresses(SOCKET sock, - in_port_t defaultPort) { - static const unsigned nelem = 100; - int status; - struct ifconf ifconf; - struct ifreq* pIfreqList; - struct ifreq* pifreq; - struct ifreq ifrBuff; - osiSockAddr pNewNode; - - InetAddrVector* retVector = new InetAddrVector(); - - /* - * use pool so that we avoid using too much stack space - * - * nelem is set to the maximum interfaces - * on one machine here - */ - pIfreqList = new ifreq[nelem]; - if(!pIfreqList) { - LOG(logLevelError, - "getBroadcastAddresses(): no memory to complete request"); - addDefaultBroadcastAddress(retVector, defaultPort); - return retVector; + InetAddrVector* getBroadcastAddresses(SOCKET sock, + unsigned short defaultPort) { + ELLLIST as; + ellInit(&as); + osiSockAddr serverAddr; + memset(&serverAddr, 0, sizeof(osiSockAddr)); + InetAddrVector * v = new InetAddrVector; + osiSockDiscoverBroadcastAddresses(&as, sock, &serverAddr); + for(ELLNODE * n = ellFirst(&as); n != NULL; n = ellNext(n)) + { + osiSockAddrNode * sn = (osiSockAddrNode *)n; + sn->addr.ia.sin_port = htons(defaultPort); + v->push_back(sn->addr); } - - // get number of interfaces - ifconf.ifc_len = nelem*sizeof(ifreq); - ifconf.ifc_req = pIfreqList; - memset(ifconf.ifc_req, 0, ifconf.ifc_len); - status = ioctl(sock, SIOCGIFCONF, &ifconf); - if(status<0||ifconf.ifc_len==0) { - LOG(logLevelDebug, - "getBroadcastAddresses(): unable to fetch network interface configuration"); - delete[] pIfreqList; - addDefaultBroadcastAddress(retVector, defaultPort); - return retVector; - } - - int maxNodes = ifconf.ifc_len/sizeof(ifreq); - //errlogPrintf("Found %d interfaces\n", maxNodes); - - pifreq = pIfreqList; - - for(int i = 0; iifr_name)) break; - - if(i>0) { - size_t n = SA_LEN(pifreq->ifr_addr)+sizeof(pifreq->ifr_name); - if(nifr_addr.sa_family!=AF_INET) continue; - - strncpy(ifrBuff.ifr_name, pifreq->ifr_name, - sizeof(ifrBuff.ifr_name)); - status = ioctl(sock, SIOCGIFFLAGS, &ifrBuff); - if(status) { - LOG( - logLevelDebug, - "getBroadcastAddresses(): net intf flags fetch for \"%s\" failed", - pifreq->ifr_name); - continue; - } - - /* - * dont bother with interfaces that have been disabled - */ - if(!(ifrBuff.ifr_flags&IFF_UP)) continue; - - /* - * dont use the loop back interface - */ - if(ifrBuff.ifr_flags&IFF_LOOPBACK) continue; - - /* - * If this is an interface that supports - * broadcast fetch the broadcast address. - * - * Otherwise if this is a point to point - * interface then use the destination address. - * - * Otherwise CA will not query through the - * interface. - */ - if(ifrBuff.ifr_flags&IFF_BROADCAST) { - strncpy(ifrBuff.ifr_name, pifreq->ifr_name, - sizeof(ifrBuff.ifr_name)); - status = ioctl(sock, SIOCGIFBRDADDR, &ifrBuff); - if(status) { - LOG( - logLevelDebug, - "getBroadcastAddresses(): net intf \"%s\": bcast addr fetch fail", - pifreq->ifr_name); - continue; - } - pNewNode.sa = ifrBuff.ifr_broadaddr; - } -#ifdef IFF_POINTOPOINT - else if(ifrBuff.ifr_flags&IFF_POINTOPOINT) { - strncpy(ifrBuff.ifr_name, pifreq->ifr_name, - sizeof(ifrBuff.ifr_name)); - status = ioctl(sock, SIOCGIFDSTADDR, &ifrBuff); - if(status) { - LOG( - logLevelDebug, - "getBroadcastAddresses(): net intf \"%s\": pt to pt addr fetch fail", - pifreq->ifr_name); - continue; - } - pNewNode.sa = ifrBuff.ifr_dstaddr; - } -#endif - else { - LOG( - logLevelDebug, - "getBroadcastAddresses(): net intf \"%s\": not point to point or bcast?", - pifreq->ifr_name); - continue; - } - pNewNode.ia.sin_port = htons(defaultPort); - - retVector->push_back(pNewNode); - } - - delete[] pIfreqList; - - return retVector; + ellFree(&as); + return v; } void encodeAsIPv6Address(ByteBuffer* buffer, const osiSockAddr* address) { @@ -218,7 +63,7 @@ namespace epics { // next 16-bits are 1 buffer->putShort(0xFFFF); // following IPv4 address in big-endian (network) byte order - in_addr_t ipv4Addr = ntohl(address->ia.sin_addr.s_addr); + uint32_t ipv4Addr = ntohl(address->ia.sin_addr.s_addr); buffer->putByte((int8)((ipv4Addr>>24)&0xFF)); buffer->putByte((int8)((ipv4Addr>>16)&0xFF)); buffer->putByte((int8)((ipv4Addr>>8)&0xFF)); diff --git a/pvAccessApp/utils/inetAddressUtil.h b/pvAccessApp/utils/inetAddressUtil.h index 6993c68..d7f1de0 100644 --- a/pvAccessApp/utils/inetAddressUtil.h +++ b/pvAccessApp/utils/inetAddressUtil.h @@ -35,10 +35,9 @@ namespace epics { * on this machine. IPv6 doesn't have a local broadcast address. * Conversion of the defaultPort to network byte order performed by * the function. - * TODO: Windows implementation of the function. */ InetAddrVector* getBroadcastAddresses(SOCKET sock, - in_port_t defaultPort); + unsigned short defaultPort); /** * Encode IPv4 address as IPv6 address. diff --git a/testApp/remote/Makefile b/testApp/remote/Makefile index 4d39022..42fa3b5 100644 --- a/testApp/remote/Makefile +++ b/testApp/remote/Makefile @@ -26,7 +26,7 @@ testBeaconEmitter_LIBS += pvData pvAccess Com testBeaconHandler_SRCS += testBeaconHandler.cpp testBeaconHandler_LIBS += pvData pvAccess Com -PROD_HOST += testChannelSearchManager +PROD_HOST_Linux += testChannelSearchManager testChannelSearchManager_SRCS += testChannelSearchManager.cpp testChannelSearchManager_LIBS += pvData pvAccess Com diff --git a/testApp/remote/testBlockingTCPClnt.cpp b/testApp/remote/testBlockingTCPClnt.cpp index 59a1494..8ce31b3 100644 --- a/testApp/remote/testBlockingTCPClnt.cpp +++ b/testApp/remote/testBlockingTCPClnt.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -160,7 +161,7 @@ void testBlockingTCPSender() { transport->enqueueSendRequest(dts); else break; - sleep(1); + epicsThreadSleep(1.0); } } catch(std::exception& e) { cout< #include +#include #include #include @@ -128,7 +129,7 @@ void testBlockingUDPSender() { for(int i = 0; i<10; i++) { cout<<" Packet: "<enqueueSendRequest(dts); - sleep(1); + epicsThreadSleep(1.0); } } diff --git a/testApp/remote/testBlockingUDPSrv.cpp b/testApp/remote/testBlockingUDPSrv.cpp index 0f8eb58..2fcdeb0 100644 --- a/testApp/remote/testBlockingUDPSrv.cpp +++ b/testApp/remote/testBlockingUDPSrv.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -118,7 +119,7 @@ void testBlockingUDPConnector() { //TODO drh can be deleted in connector! while(drh->getPackets()<10) { - sleep(1); + epicsThreadSleep(1.0); } } diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index c880220..fba49a9 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -596,7 +596,7 @@ class MockChannel : public Channel { PVDoubleArray *pvField = static_cast(m_pvStructure->getScalarArrayField(String("value"), pvDouble)); int v = 0; int ix = 0; - int COUNT = 1000; + const int COUNT = 1000; pvField->setCapacity(1000*COUNT); for (int n = 0; n < 1000; n++) diff --git a/testApp/utils/Makefile b/testApp/utils/Makefile index 28fe01b..a5192ce 100644 --- a/testApp/utils/Makefile +++ b/testApp/utils/Makefile @@ -26,11 +26,11 @@ PROD_HOST += transportRegisterTest transportRegisterTest_SRCS += transportRegistryTest.cpp transportRegisterTest_LIBS += pvAccess Com pvData -PROD_HOST += namedLockPatternTest +PROD_HOST_Linux += namedLockPatternTest namedLockPatternTest_SRCS += namedLockPatternTest.cpp namedLockPatternTest_LIBS += pvAccess Com pvData -PROD_HOST += configurationTest +PROD_HOST_Linux += configurationTest configurationTest_SRCS += configurationTest.cpp configurationTest_LIBS += pvAccess Com pvData