私はTCPソケットを使ってC/Linuxにチャットサーバーを持っています。 libevを使用している場合、私はソケットの一度だけreadイベント用のev_ioウォッチャーを作成することができます。以下のような何か:Libev - I/Oコールバック
ev_io* new_watcher = (ev_io*)malloc(sizeof(ev_io));
//initialize the watcher
ev_init(new_watcher, read_cb);
//set the fd and event to fire on write
ev_io_set(new_watcher, watcher->fd, EV_READ);
//start watching
ev_io_start(loop, new_watcher);
と読むべきデータがあるとき、読み取りイベントのみが発生しますので、これは正常に動作します。しかし、書き込みイベントは別に扱う必要があります。なぜなら、書き込むデータがなくても常にイベントが発生するからです。この問題を解決するために、私は自分のread_callbackに書き込み可能なデータがある場合にのみ書き込みデータ用のev_ioウォッチャーを作成し、write_callbackはメッセージを送信した後にウォッチャーを削除します。
これは、メッセージを処理する必要があるたびに、書き込みウォッチャーを割り当て、初期化し、設定し、監視し、解除し、割り当てを解除することを意味します。私はこれを間違って非効率的に扱っているかもしれないと心配しています。
libevでwrite_callbackイベントを処理する最も良い方法は何ですか?
ありがとうございます。