41 #include "rtpconfig.h" 47 #if defined(RTP_HAVE_WSAPOLL) || defined(RTP_HAVE_POLL) 49 #ifndef RTP_HAVE_WSAPOLL 51 #endif // !RTP_HAVE_WSAPOLL 59 inline int RTPSelect(
const SocketType *sockets, int8_t *readflags,
size_t numsocks, RTPTime timeout)
63 vector<struct pollfd> fds(numsocks);
65 for (
size_t i = 0 ; i < numsocks ; i++)
67 fds[i].fd = sockets[i];
68 fds[i].events = POLLIN;
74 if (timeout.GetDouble() >= 0)
76 double dtimeoutmsec = timeout.GetDouble()*1000.0;
77 if (dtimeoutmsec > (numeric_limits<int>::max)())
78 dtimeoutmsec = (numeric_limits<int>::max)();
80 timeoutmsec = (int)dtimeoutmsec;
83 #ifdef RTP_HAVE_WSAPOLL 84 int status = WSAPoll(&(fds[0]), (ULONG)numsocks, timeoutmsec);
86 int status = poll(&(fds[0]), numsocks, timeoutmsec);
87 #endif // RTP_HAVE_WSAPOLL 89 return ERR_RTP_SELECT_ERRORINPOLL;
93 for (
size_t i = 0 ; i < numsocks ; i++)
106 #ifndef RTP_SOCKETTYPE_WINSOCK 107 #include <sys/select.h> 108 #include <sys/time.h> 109 #include <sys/types.h> 110 #endif // !RTP_SOCKETTYPE_WINSOCK 125 inline int RTPSelect(
const SocketType *sockets, int8_t *readflags,
size_t numsocks,
RTPTime timeout)
128 struct timeval *pTv = 0;
139 for (
size_t i = 0 ; i < numsocks ; i++)
141 #ifndef RTP_SOCKETTYPE_WINSOCK 142 const int setsize = FD_SETSIZE;
145 if (sockets[i] >= setsize)
146 return ERR_RTP_SELECT_SOCKETDESCRIPTORTOOLARGE;
147 #endif // RTP_SOCKETTYPE_WINSOCK 148 FD_SET(sockets[i], &fdset);
152 int status = select(FD_SETSIZE, &fdset, 0, 0, pTv);
154 return ERR_RTP_SELECT_ERRORINSELECT;
158 for (
size_t i = 0 ; i < numsocks ; i++)
160 if (FD_ISSET(sockets[i], &fdset))
169 #endif // RTP_HAVE_POLL || RTP_HAVE_WSAPOLL 171 #endif // RTPSELECT_H uint32_t GetMicroSeconds() const
Returns the number of microseconds stored in this instance.
Definition: rtptimeutilities.h:181
double GetDouble() const
Returns the time stored in this instance, expressed in units of seconds.
Definition: rtptimeutilities.h:116
Definition: rtpfaketransmitter.h:64
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
int64_t GetSeconds() const
Returns the number of seconds stored in this instance.
Definition: rtptimeutilities.h:176
int RTPSelect(const SocketType *sockets, int8_t *readflags, size_t numsocks, RTPTime timeout)
Wrapper function around 'select', 'poll' or 'WSAPoll', depending on the availability on your platform...
Definition: rtpselect.h:125