0

イベントによって生成されたコールバックでファイル記述子のデータを読み取るプログラムを作成しようとしています。しかし、データを読み取ると終了します。つまり、event_base_loop() は 1 回だけ実行されます。データを読み取ったときに再度実行したいのですが、今はグローバル イベントを使用してそれを達成し、コールバック関数で add_event() を再度呼び出しています

 struct event *ev1;    //this is the global event variable
 void Cb(evutil_socket_t fd, short what,void * arg)
 {
      char buffer[256];
      int rc= recv(fd,buffer,sizeof(buffer),0);
      printf("DATA = %s\n",buffer);
      event_add(ev1,NULL);
  }

  void Create_UDP_Socket_Event(int fd)
  {
    struct event_base *base = event_base_new();
    base = event_base_new();
    ev1 = event_new(base, fd,EV_READ, cb ,(char *)"");      
    event_add(ev1,NULL);
    int res=event_base_loop(base,0);   
  }

複数の udp ソケットを持つ動的コードを作成する必要があるため、このアプローチを使用できません。fedora 17 を使用しており、コンパイラは g++ (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) です。

4

0 に答える 0