示例#1
0
文件: eventlib.c 项目: debanshu/loski
LOSKIDRV_API int loski_waitevent(loski_EventWatcher *watcher,
                               void *queue,
                               size_t *count,
                               loski_Seconds timeout)
{
	int res;
	fd_set *sets = (fd_set *)queue;
	memcpy(&sets[0], &watcher->sets[0], sizeof(fd_set));
	memcpy(&sets[1], &watcher->sets[1], sizeof(fd_set));
	if (timeout >= 0) {
		struct timeval tm;
		seconds2timeval(timeout, &tm);
		res = select(watcher->maxfd, &sets[0], &sets[1], NULL, &tm);
	} else {
		res = select(watcher->maxfd, &sets[0], &sets[1], NULL, NULL);
	}
	if (res == -1) return errno;
	*count = 2*(watcher->maxfd);
	return 0;
}
示例#2
0
LOSKIDRV_API int loski_waitevent(loski_EventDriver *drv,
                                 loski_EventWatcher *watcher,
                                 void *queue,
                                 size_t *count,
                                 lua_Number timeout)
{
	int res;
	fd_set *sets = (fd_set *)queue;
	memcpy(&sets[0], &watcher->sets[0], sizeof(fd_set));
	memcpy(&sets[1], &watcher->sets[1], sizeof(fd_set));
	if (timeout >= 0) {
		struct timeval tm;
		seconds2timeval(timeout, &tm);
		res = select(0, &sets[0], &sets[1], NULL, &tm);
	} else {
		res = select(0, &sets[0], &sets[1], NULL, NULL);
	}
	if (res == SOCKET_ERROR) return WSAGetLastError();
	*count = (res == 0) ? 0 : 2*(watcher->maxfd);
	return 0;
}