7

event_set()libevent を使用してソケットを監視するには、最初に正しいパラメータで呼び出す必要があることを理解してい ます。

libevent のドキュメントには、eventevent_set() のパラメーターは EV_READ または EV_WRITE のいずれかであると記載されています。そして、このイベント パラメータが注目すべきイベントであること。

しかし、EV_READ と EV_WRITE が対応するソケット イベントは何ですか? つまり、受信メッセージを監視するのではなく、接続状態の変化を監視するにはどうすればよいでしょうか?

4

1 に答える 1

4

libevent のドキュメントに関しては、このサイトが優れていることがわかりました。eventsを扱うページには、さまざまなイベント フラグが実際に何を意味するかについての概要があります。そのリンクから:

  • EV_READ : このフラグは、提供されたファイル記述子の読み取り準備が整ったときにアクティブになるイベントを示します。

  • EV_WRITE : このフラグは、提供されたファイル記述子が書き込み可能になるとアクティブになるイベントを示します。

  • EV_SIGNAL : シグナル検出の実装に使用されます。

  • EV_PERSIST : イベントが永続的であることを示します。

  • EV_ET : 基になる event_base バックエンドがエッジ トリガー イベントをサポートしている場合、イベントをエッジ トリガーにする必要があることを示します。これは、EV_READ と EV_WRITE のセマンティクスに影響します。

したがって、あなたの質問に明確に答えるには: EV_READ は、ソケットまたは bufferevent からデータを読み取れるようにすることに対応します。これは、私が知る限り、libevent ソケットに相当します。EV_WRITE は、データを書き込む準備ができているソケット/バッファ イベントに対応します。読み取り/書き込みコールバックを設定して、cb引数を使用して実際にデータの読み取りと書き込みを行うことができます

struct event *event_new(struct event_base *base, evutil_socket_t fd, short what, event_callback_fn cb, void *arg);

ただし、libevent を使用してソケット IO を実行している場合は、バッファー イベントの使用を検討することをお勧めします。これは、私のプロジェクトの 1 つである snot_mon で使用しているもので、github で確認できます

于 2011-08-29T18:46:39.480 に答える