Ejemplo n.º 1
0
pipeevt_t* poll_event_from_pipes(void)
{
	struct timeval to;
	to.tv_sec=0; to.tv_usec=100000;

	fd_set set;
	memcpy(&set, &pipeset, sizeof(fd_set));
	int nfds=select(fd_max+1, &set, NULL, NULL, &to);

	pipeevt_t* ret=NULL;
	if(nfds>0)
	{
		for(int i=0; i<=pipe_slot; ++i)
		{
			if(pipe_fds[i] != -1 && FD_ISSET(pipe_fds[i], &set))
			{
				int s;
				ret=event_recv(pipe_fds[i], &s);
				if(s==1)
				{
					pipe_remove(pipe_fds[i]);
					continue;
				}
				return ret;
			}
		}
	}
	return ret;
}
Ejemplo n.º 2
0
void event_poll::handle_poll()
{
    int event_cnt;
    while (looping()) {
        event_cnt = _poll.poll(_event, 1000);
        while (event_cnt > 0) {
            io_epoll::event ev =  _event.at(static_cast<size_t>(--event_cnt));
            tunnel * tun = (tunnel *)ev.data.ptr;
            if (io_epoll::ev_error(ev)) {
                event_remove(tun);

            } else {

                if (io_epoll::ev_recv(ev)) {
                    event_recv(tun);
                }

                if (io_epoll::ev_send(ev)) {
                    event_send(tun);
                }
            }
        }

        handle_event();

    }
}
Ejemplo n.º 3
0
static void *event_threadfunc(void *args)
{
	int fd=*(int*)args;
	struct pollfd fds[1];
	fds[0].fd=fd;
	fds[0].events=POLLIN;
	while(run_event_thread)
	{
		if(((poll(fds, 1, 1)) > 0) && (fds[0].revents & POLLIN))
		{
			pipeevt_t* e=event_recv(fd, NULL);
			free(e);
		}
		fds[0].fd=fd;
		fds[0].events=POLLIN;
	}
	free(args);
	return NULL;
}