41 #include "rtpconfig.h"
47 #if defined(RTP_HAVE_WSAPOLL) || defined(RTP_HAVE_POLL)
49 #ifndef RTP_HAVE_WSAPOLL
60 inline int RTPSelect(
const SocketType *sockets, int8_t *readflags,
size_t numsocks, RTPTime timeout)
64 vector<struct pollfd> fds(numsocks);
66 for (
size_t i = 0 ; i < numsocks ; i++)
68 fds[i].fd = sockets[i];
69 fds[i].events = POLLIN;
75 if (timeout.GetDouble() >= 0)
77 double dtimeoutmsec = timeout.GetDouble()*1000.0;
78 if (dtimeoutmsec > (numeric_limits<int>::max)())
79 dtimeoutmsec = (numeric_limits<int>::max)();
81 timeoutmsec = (int)dtimeoutmsec;
84 #ifdef RTP_HAVE_WSAPOLL
85 int status = WSAPoll(&(fds[0]), (ULONG)numsocks, timeoutmsec);
87 return ERR_RTP_SELECT_ERRORINPOLL;
89 int status = poll(&(fds[0]), numsocks, timeoutmsec);
95 return ERR_RTP_SELECT_ERRORINPOLL;
101 for (
size_t i = 0 ; i < numsocks ; i++)
114 #ifndef RTP_SOCKETTYPE_WINSOCK
115 #include <sys/select.h>
116 #include <sys/time.h>
117 #include <sys/types.h>
134 inline int RTPSelect(
const SocketType *sockets, int8_t *readflags,
size_t numsocks,
RTPTime timeout)
137 struct timeval *pTv = 0;
148 for (
size_t i = 0 ; i < numsocks ; i++)
150 #ifndef RTP_SOCKETTYPE_WINSOCK
151 const int setsize = FD_SETSIZE;
154 if (sockets[i] >= setsize)
155 return ERR_RTP_SELECT_SOCKETDESCRIPTORTOOLARGE;
157 FD_SET(sockets[i], &fdset);
161 int status = select(FD_SETSIZE, &fdset, 0, 0, pTv);
162 #ifdef RTP_SOCKETTYPE_WINSOCK
164 return ERR_RTP_SELECT_ERRORINSELECT;
171 return ERR_RTP_SELECT_ERRORINSELECT;
177 for (
size_t i = 0 ; i < numsocks ; i++)
179 if (FD_ISSET(sockets[i], &fdset))
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:86
int64_t GetSeconds() const
Returns the number of seconds stored in this instance.
Definition: rtptimeutilities.h:177
uint32_t GetMicroSeconds() const
Returns the number of microseconds stored in this instance.
Definition: rtptimeutilities.h:182
double GetDouble() const
Returns the time stored in this instance, expressed in units of seconds.
Definition: rtptimeutilities.h:117
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:134