2

TCP 接続ソケットなど、特定のソケットのイベントをイベント ループに追加するとします。ソケットが閉じられた場合、libevent はどのように動作しますか? これを検出できますか?

ありがとう!

4

1 に答える 1

0

編集:最初はあなたの質問を誤解していたと思います。

ソケットがリモートエンドから閉じられていることを意味する場合

ドキュメントに従って、event_new()およびevent_add()呼び出しを使用して、ソケットへの関心を登録できます。EV_READソケットがいつ閉じられるかに関心があるので、必ず指定してください。

読み取り可能なデータと閉じたソケットとの間で、ファイル記述子の準備状況に違いはないことに注意してください。通常、ソケットを読み取ってどの条件が true かを確認する必要がありますが、ソケットを読み取りたくない場合は、ここでヒントを探すことができます。

ソケットがローカルで閉じられていることを意味する場合 (ファイル記述子が閉じられました)

閉じられた後にファイル記述子を使用することは決して定義されておらず、常に未定義の結果につながる可能性があります。これは libevent に固有のものではありません。ファイル記述子を閉じる前に、プログラム内の他のスレッドがそれを使用していないことを確認する必要があります。また、プログラムの他の部分が将来それを使用しようとしないことを確認する必要があります。これは、libevent を閉じると同時に、ファイル記述子を libevent から登録解除することを意味します。

于 2013-05-22T23:47:22.147 に答える