From 9b144d30e0ea8ce900c37b96ba2cbdda14b0ae88 Mon Sep 17 00:00:00 2001 From: kwacker Date: Sun, 11 Apr 2010 13:46:11 +0200 Subject: Burn 0.2.0-beta3 und Streamdev mit Paches aktualisiert --- plugins/streamdev/streamdev-cvs/tools/select.c | 51 ++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 plugins/streamdev/streamdev-cvs/tools/select.c (limited to 'plugins/streamdev/streamdev-cvs/tools/select.c') diff --git a/plugins/streamdev/streamdev-cvs/tools/select.c b/plugins/streamdev/streamdev-cvs/tools/select.c new file mode 100644 index 0000000..2a3abe5 --- /dev/null +++ b/plugins/streamdev/streamdev-cvs/tools/select.c @@ -0,0 +1,51 @@ +#include "tools/select.h" + +#include +#include +#include +#include +#include +#include + +cTBSelect::cTBSelect(void) { + Clear(); +} + +cTBSelect::~cTBSelect() { +} + +int cTBSelect::Select(uint TimeoutMs) { + struct timeval tv; + ssize_t res = 0; + int ms; + + tv.tv_usec = (TimeoutMs % 1000) * 1000; + tv.tv_sec = TimeoutMs / 1000; + memcpy(m_FdsResult, m_FdsQuery, sizeof(m_FdsResult)); + + if (TimeoutMs == 0) + return ::select(m_MaxFiled + 1, &m_FdsResult[0], &m_FdsResult[1], NULL, &tv); + + cTimeMs starttime; + ms = TimeoutMs; + while (ms > 0 && (res = ::select(m_MaxFiled + 1, &m_FdsResult[0], &m_FdsResult[1], NULL, + &tv)) == -1 && errno == EINTR) { + ms = TimeoutMs - starttime.Elapsed(); + tv.tv_usec = (ms % 1000) * 1000; + tv.tv_sec = ms / 1000; + memcpy(m_FdsResult, m_FdsQuery, sizeof(m_FdsResult)); + } + if (ms <= 0 || res == 0) { + errno = ETIMEDOUT; + return -1; + } + return res; +} + +int cTBSelect::Select(void) { + ssize_t res; + do { + memcpy(m_FdsResult, m_FdsQuery, sizeof(m_FdsResult)); + } while ((res = ::select(m_MaxFiled + 1, &m_FdsResult[0], &m_FdsResult[1], NULL, NULL)) == -1 && errno == EINTR); + return res; +} -- cgit v1.2.3