ioevent support set timeout
parent
b3e37bd584
commit
7e1abd6054
|
|
@ -30,7 +30,7 @@ int kqueue_ev_convert(int16_t event, uint16_t flags)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ioevent_init(IOEventPoller *ioevent, const int size,
|
int ioevent_init(IOEventPoller *ioevent, const int size,
|
||||||
const int timeout, const int extra_events)
|
const int timeout_ms, const int extra_events)
|
||||||
{
|
{
|
||||||
int bytes;
|
int bytes;
|
||||||
|
|
||||||
|
|
@ -40,26 +40,24 @@ int ioevent_init(IOEventPoller *ioevent, const int size,
|
||||||
ioevent->iterator.count = 0;
|
ioevent->iterator.count = 0;
|
||||||
|
|
||||||
#if IOEVENT_USE_EPOLL
|
#if IOEVENT_USE_EPOLL
|
||||||
ioevent->timeout = timeout;
|
|
||||||
ioevent->poll_fd = epoll_create(ioevent->size);
|
ioevent->poll_fd = epoll_create(ioevent->size);
|
||||||
bytes = sizeof(struct epoll_event) * size;
|
bytes = sizeof(struct epoll_event) * size;
|
||||||
ioevent->events = (struct epoll_event *)malloc(bytes);
|
ioevent->events = (struct epoll_event *)malloc(bytes);
|
||||||
#elif IOEVENT_USE_KQUEUE
|
#elif IOEVENT_USE_KQUEUE
|
||||||
ioevent->timeout.tv_sec = timeout / 1000;
|
|
||||||
ioevent->timeout.tv_nsec = 1000000 * (timeout % 1000);
|
|
||||||
ioevent->poll_fd = kqueue();
|
ioevent->poll_fd = kqueue();
|
||||||
bytes = sizeof(struct kevent) * size;
|
bytes = sizeof(struct kevent) * size;
|
||||||
ioevent->events = (struct kevent *)malloc(bytes);
|
ioevent->events = (struct kevent *)malloc(bytes);
|
||||||
#elif IOEVENT_USE_PORT
|
#elif IOEVENT_USE_PORT
|
||||||
ioevent->timeout.tv_sec = timeout / 1000;
|
|
||||||
ioevent->timeout.tv_nsec = 1000000 * (timeout % 1000);
|
|
||||||
ioevent->poll_fd = port_create();
|
ioevent->poll_fd = port_create();
|
||||||
bytes = sizeof(port_event_t) * size;
|
bytes = sizeof(port_event_t) * size;
|
||||||
ioevent->events = (port_event_t *)malloc(bytes);
|
ioevent->events = (port_event_t *)malloc(bytes);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ioevent->events == NULL) {
|
if (ioevent->events == NULL) {
|
||||||
return errno != 0 ? errno : ENOMEM;
|
return errno != 0 ? errno : ENOMEM;
|
||||||
}
|
}
|
||||||
|
ioevent_set_timeout(ioevent, timeout_ms);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ioevent_init(IOEventPoller *ioevent, const int size,
|
int ioevent_init(IOEventPoller *ioevent, const int size,
|
||||||
const int timeout, const int extra_events);
|
const int timeout_ms, const int extra_events);
|
||||||
void ioevent_destroy(IOEventPoller *ioevent);
|
void ioevent_destroy(IOEventPoller *ioevent);
|
||||||
|
|
||||||
int ioevent_attach(IOEventPoller *ioevent, const int fd, const int e,
|
int ioevent_attach(IOEventPoller *ioevent, const int fd, const int e,
|
||||||
|
|
@ -123,6 +123,22 @@ int ioevent_modify(IOEventPoller *ioevent, const int fd, const int e,
|
||||||
int ioevent_detach(IOEventPoller *ioevent, const int fd);
|
int ioevent_detach(IOEventPoller *ioevent, const int fd);
|
||||||
int ioevent_poll(IOEventPoller *ioevent);
|
int ioevent_poll(IOEventPoller *ioevent);
|
||||||
|
|
||||||
|
static inline void ioevent_set_timeout(IOEventPoller *ioevent, const int timeout_ms)
|
||||||
|
{
|
||||||
|
#if IOEVENT_USE_EPOLL
|
||||||
|
ioevent->timeout = timeout_ms;
|
||||||
|
#else
|
||||||
|
ioevent->timeout.tv_sec = timeout_ms / 1000;
|
||||||
|
ioevent->timeout.tv_nsec = 1000000 * (timeout_ms % 1000);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int ioevent_poll_ex(IOEventPoller *ioevent, const int timeout_ms)
|
||||||
|
{
|
||||||
|
ioevent_set_timeout(ioevent, timeout_ms);
|
||||||
|
return ioevent_poll(ioevent);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue