From 02d25c3c48731b19955bbb530f48191e61afec1f Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Thu, 23 Jan 2025 10:30:38 +0100 Subject: [PATCH] fdManager uses poll() on Windows and RTEMS too RTEMS needs to use the "new" network stack Windows has poll since Vista Don't use poll on cygwin: it emulates poll() using select(). --- modules/libcom/src/fdmgr/fdManager.cpp | 23 ++++++++++++++--------- modules/libcom/src/fdmgr/fdManager.h | 24 ++++++++++++------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/modules/libcom/src/fdmgr/fdManager.cpp b/modules/libcom/src/fdmgr/fdManager.cpp index 94c5f7b14..d0f416422 100644 --- a/modules/libcom/src/fdmgr/fdManager.cpp +++ b/modules/libcom/src/fdmgr/fdManager.cpp @@ -19,28 +19,33 @@ // 1) This library is not thread safe // -#include - #define instantiateRecourceLib #include "epicsAssert.h" #include "epicsThread.h" #include "fdManager.h" #include "locationException.h" -using std :: max; - -fdManager fileDescriptorManager; - -static const unsigned mSecPerSec = 1000u; -static const unsigned uSecPerSec = 1000u * mSecPerSec; - #ifdef FDMGR_USE_POLL +#ifdef _WIN32 +#define poll WSAPoll +#endif + static const int PollEvents[] = { // must match fdRegType POLLRDNORM | POLLRDBAND | POLLIN | POLLHUP | POLLERR, POLLWRBAND | POLLWRNORM | POLLOUT | POLLERR, POLLPRI}; #endif +#ifdef FDMGR_USE_SELECT +#include +using std :: max; +#endif + +fdManager fileDescriptorManager; + +static const unsigned mSecPerSec = 1000u; +static const unsigned uSecPerSec = 1000u * mSecPerSec; + // // fdManager::fdManager() // diff --git a/modules/libcom/src/fdmgr/fdManager.h b/modules/libcom/src/fdmgr/fdManager.h index 22fce9762..7665b6c3e 100644 --- a/modules/libcom/src/fdmgr/fdManager.h +++ b/modules/libcom/src/fdmgr/fdManager.h @@ -19,18 +19,6 @@ #ifndef fdManagerH_included #define fdManagerH_included -#if !defined(FDMGR_USE_POLL) && !defined(FDMGR_USE_SELECT) -#if defined(__linux__) -#define FDMGR_USE_POLL -#else -#define FDMGR_USE_SELECT -#endif -#endif - -#ifdef FDMGR_USE_POLL -#include -#endif - #include "libComAPI.h" // reset share lib defines #include "tsDLList.h" #include "resourceLib.h" @@ -38,6 +26,18 @@ #include "osiSock.h" #include "epicsTimer.h" +#if !defined(FDMGR_USE_POLL) && !defined(FDMGR_USE_SELECT) +#if defined(__linux__) || _WIN32_WINNT >= 0x600 || (defined(__rtems__) && !defined(RTEMS_LEGACY_STACK)) +#define FDMGR_USE_POLL +#else +#define FDMGR_USE_SELECT +#endif +#endif + +#if defined(FDMGR_USE_POLL) && !defined(_WIN32) +#include +#endif + enum fdRegType {fdrRead, fdrWrite, fdrException, fdrNEnums}; //