0

最近、libeventを使用した小さなソケットサーバープログラムがあります。

要約すると、それは次の仕事をします。

void read_function(int fd, short event, void* arg) {
    printf("callback is called!\n");

    // read from fd, and send a reply to fd!
}

void accept_thread_function() {
    int fd = accept(...);
    struct event* ev_read = new struct event();
    memset(ev_read, 0, sizeof(struct event));
    event_set(ev_read, fd, EV_READ|EV_PERSIST,read_function,ev_read);
    event_add(ev_read, 0);
}

int main() {
    event_init();
    THREAD a = start 'accept_thread_function' as a thread;
    event_dispatch();
    THREAD::join(a);
}

問題は、read_functionが呼び出されないことです。

着信接続は正しく受け入れられます。(はぁ)

この問題についてのご意見をお待ちしております。

前もって感謝します。

4

1 に答える 1

0

まず、ニック・マシューソンによって書かれたlibeventに関する(無料の)素晴らしい本を見てください:

http://www.wangafu.net/~nickm/libevent-book/Ref1_libsetup.html#_locks_and_threading

次に、 event_dispatch()を呼び出す前に、イベントが追加されていることを確認する必要があります。

于 2013-03-22T14:24:53.710 に答える