Ejemplo n.º 1
0
Archivo: neighbor.c Proyecto: hgn/ospfd
int neighbor_start_inactive_timer(struct ospfd *ospfd,
		struct interface_data *i, struct neighbor *neighbor)
{
	int ret;
	struct inactivity_timer_data *inactivity_timer_data;
	/* FIXME: hardcoded time-out */
	struct timespec timespec = { 10, 0 };
	struct ev_entry *ev_entry;

	msg(ospfd, DEBUG, "prepare inactive timer for neighbor");

	inactivity_timer_data = xzalloc(sizeof(struct inactivity_timer_data));
	inactivity_timer_data->ospfd    = ospfd;
	inactivity_timer_data->neighbor = neighbor;
	inactivity_timer_data->interface_data = i;

	neighbor->inactivity_timer_data = inactivity_timer_data;

	ev_entry = ev_timer_new(&timespec, neighbor_inactive_timer_expired,
			inactivity_timer_data);
	if (!ev_entry) {
		err_msg_die(EXIT_FAILURE, "Cannot initialize a new timer");
	}

	inactivity_timer_data->neighbor->inactive_timer_entry = ev_entry;

	ret = ev_add(ospfd->ev, ev_entry);
	if (ret != EV_SUCCESS) {
		err_msg_die(EXIT_FAILURE, "Cannot add new timer to global event handler");
	}

	return SUCCESS;
}
Ejemplo n.º 2
0
Archivo: event.c Proyecto: barak/lush
void enqueue_eventdesc(at *handler, int event, 
                       int xd, int yd, int xu, int yu, char *desc)
{
   int mods = -1;
   at *ev = event_to_list(event, xd, yd, xu, yu, &mods);
   if (!ev) return;
   ev_add(handler, ev, desc, mods);
}
Ejemplo n.º 3
0
Archivo: event.c Proyecto: barak/lush
/* event_add --
 * Add a new event targeted to a specific handler.
 */
void event_add(at *handler, at *event)
{
   if (!handler)
      RAISEF("invalid event handler", handler);
   if (!CONSP(event))
      RAISEF("invalid event (not a list expected)", event);
   ev_add(handler, event, NULL, -1);
}
Ejemplo n.º 4
0
int main(int argc, char *argv[]){
    int sfd;
    sfd = tcpsock_create();
    sock_setopt(sfd);
    sock_listen(sfd, SERVER_PORT, BACKLOG);
    fd_setnb(sfd);

    int evfd;
    evfd = ev_create();
    ev_add(evfd, sfd, EV_IN);

    struct ev_event events[MAX_EVENT];
    int n;
    int i;
    int cfd;
    unsigned char buf[BUF_SIZE];
    ssize_t rbytes;
    while(1) {
        n = ev_wait(evfd, events, MAX_EVENT, -1);
        printf("%d\n", n);
        for(i=0; i < n; i++){
            printf("%d, %d, %d, %d, %d\n", events[i].events, events[i].fd, events[i].readable, events[i].writable, events[i].closable);
            if (events[i].fd == sfd) {
                while(1) {
                    cfd = sock_accept(sfd);
                    if (cfd == -1) {
                        break;
                    }
                    fd_setnb(cfd);
                    ev_add(evfd, cfd, EV_IN);
                }
            } else if (events[i].closable == true) {
                close(events[i].fd);
            } else if (events[i].readable == true) {
                while(1) {
                    rbytes = sock_recv(events[i].fd, buf, BUF_SIZE);
                    if (rbytes == -1) {
                        break;
                    }
                    buf[rbytes] = '\0';
                    printf("%s", buf);
                }
            }
        }
    }
}
Ejemplo n.º 5
0
/* event_add --
   Add a new event targeted to a specific handler.
*/
void
event_add(at *handler, at *event)
{
  if (! handler)
    error(NIL,"Illegal null event handler",NIL);
  if (! CONSP(event))
    error(NIL,"Illegal event expression (list expected)", event);
  ev_add(handler, event, NULL, -1);
}
Ejemplo n.º 6
0
Archivo: network.c Proyecto: hgn/ospfd
int init_network(struct ospfd *ospfd)
{
	int ret;
	struct ev_entry *ee;

	switch (ospfd->opts.family) {
		case AF_INET:
			ret = init_raw_4_socket(ospfd);
			if (ret != SUCCESS) {
				err_msg("Failed to initialize raw socket");
				return FAILURE;
			}
			/* and register fd */
			ee = ev_entry_new(ospfd->network.fd, EV_READ, packet_input, ospfd);
			if (!ee) {
				err_msg("cannot at RAW socket to event mechanism");
				return FAILURE;
			}
			ret = ev_add(ospfd->ev, ee);
			if (ret != EV_SUCCESS) {
				err_msg("cannot at RAW socket to event mechanism");
				return FAILURE;
			}
			break;
		default:
			err_msg("Protocol family not supported (%d)", ospfd->opts.family);
			return FAILURE;
	}

	ret = get_interface_addr(ospfd);
	if (ret != SUCCESS) {
		err_msg("failed to determine interface addresses");
		return FAILURE;
	}

	return SUCCESS;
}
Ejemplo n.º 7
0
Archivo: pyext.c Proyecto: pzread/sdup
static PyObject* pyext_epoll_register(PyObject *self,PyObject *args){
    int ret;
    khiter_t hit;

    int epfd;
    int fd;
    uint32_t events;

    struct pyep_data *pyep;
    struct ev_header *evhdr;

    if(!PyArg_ParseTuple(args,"iiI",&epfd,&fd,&events)){
        PyErr_BadArgument();
        return NULL;
    }
    if((pyep = pyep_getby_epfd(epfd)) == NULL){
        PyErr_SetString(PyExc_KeyError,"epoll file descriptor not found");
        return NULL;
    }

    if((evhdr = malloc(sizeof(*evhdr))) == NULL){
        return PyErr_NoMemory();
    }
    evhdr->fd = fd;
    evhdr->handler = NULL;
    if(ev_add(&pyep->evdata,evhdr,events)){
        PyErr_SetString(PyExc_SystemError,"register event failed");
        return NULL;
    }
    
    hit = kh_put(ptr,pyep->evhdr_ht,fd,&ret);
    kh_value(pyep->evhdr_ht,hit) = evhdr;

    Py_INCREF(Py_None);
    return Py_None;
}