예제 #1
0
/*
 * Processes an incoming "handle a new connection" item. This is called when
 * input arrives on the libevent wakeup pipe.
 */
static void thread_libevent_process(int fd, short which, void *arg) {
    LIBEVENT_THREAD *me = arg;
    CQ_ITEM *item;
    char buf[1];

    if (read(fd, buf, 1) != 1)
        if (settings.verbose > 0)
            fprintf(stderr, "Can't read from libevent pipe\n");

    if (item = cq_peek(&me->new_conn_queue)) {
    conn *c = conn_new(item->sfd, item->init_state, item->event_flags,
                       item->read_buffer_size, item->is_udp, me->base);
    if (!c) {
        if (item->is_udp) {
            fprintf(stderr, "Can't listen for events on UDP socket\n");
            exit(1);
            }
        else {
        if (settings.verbose > 0) {
                fprintf(stderr, "Can't listen for events on fd %d\n",
                    item->sfd);
        }
        close(item->sfd);
        }
    }
        cqi_free(item);
    }
}
예제 #2
0
int main(int argc, char **argv) {
  printf("test main started\n");
  //test cq_alloc
  cirq q = cq_alloc();
  
  //test cq_size
  int size = cq_size(q);
  printf("size of the cirq:%d\n", size);
  
  //cq_enq
  cq_enq(q, "apples");
  size = cq_size(q);
  printf("size of the cirq:%d\n", size);
  
  cq_enq(q, "bananas");
  int one = 1;
  cq_enq(q, &one);
  int two = 2;
  cq_enq(q, &two);
  int three = 3;
  cq_enq(q, &three);
  int four = 4;
  cq_enq(q, &four);
  int five = 5;
  cq_enq(q, &five);

  size = cq_size(q);
  printf("size of the cirq:%d\n", size);

  //*cq_peek
  printf("peek:%s\n", (char*)cq_peek(q));

  //*cq_deq
  printf("deq apples?%s.\n", (char*)cq_deq(q));
  printf("deq bananas?%s.\n", (char*)cq_deq(q));
  printf("deq 1: %d\n", *((int*)cq_deq(q)));
  printf("deq 2: %d\n", *((int*)cq_deq(q)));
  printf("deq 3: %d\n", *((int*)cq_deq(q)));
  printf("deq 4: %d\n", *((int*)cq_deq(q)));
  printf("deq 5: %d\n", *((int*)cq_deq(q)));
  
  //cq_rot
 
  //cq_free
  printf("test free:\n");
  size = cq_size(q);
  printf("size before freeing:%d\n", size);  
  cq_free(q);
  printf("size after freeing:%d\n", size);  
  // size = cq_size(q);
  //printf("size of the cirq after freeing:%d\n", size);


  return 0;
}