エッジ トリガー モード ( )でLinux epollを使用し、読み取り/書き込みが/でEPOLLET
失敗した場合、読み取り/書き込み準備が失われ、準備が整うとすぐに新しい準備イベントが使用可能になることが保証されていることを意味します。取り戻した。EAGAIN
EWOULDBLOCK
epoll_wait()
さらに、エッジ トリガー モードでLinux epollとノンブロッキング ストリーム モード ソケットを使用し、EPOLLRDHUP
イベントへの関心を登録し、EPOLLRDHUP
イベントがまだ受信されていない場合、短い読み取り/書き込み (要求されたサイズよりも小さい戻り値) ) は、読み取り/書き込み準備が整っていないことも意味します。また、準備が回復したときに、 / で読み取りEAGAIN
/書き込みが失敗したことがなくても、新しい準備通知を信頼できますEWOULDBLOCK
。
同様に、エッジ トリガー モード ( ) でKqueue (macOS/FreeBSD) を操作し、読み取り/書き込みが/でEV_CLEAR
失敗した場合、読み取り/書き込み準備が失われ、新しい準備イベントが利用可能になることが保証されていることを意味します。準備が整い次第経由。EAGAIN
EWOULDBLOCK
kevent()
質問:エッジ トリガー モードでKqueueとノンブロッキング ストリーム モード ソケットを使用する場合EV_EOF
、イベントへの関心を登録し、EV_EOF
イベントがまだ受信されていないという条件で、同様の保証がありますか?読み取り/書き込み準備が失われ、準備が回復したときに新しい準備イベントが生成されることが保証されていることを意味しますか?
編集:注:短い読み取りは読み取り準備の喪失を意味することを知っていると、(一般的な場合に)/失敗read()
を取得するためだけの冗長な呼び出しを回避できます。EAGAIN
EWOULDBLOCK
Linux epoll のコンテキストでの短い読み取り/書き込みの意味は、epoll
(7) man ページのこのコメントから得られます。
ストリーム指向のファイル (例: パイプ、FIFO、ストリーム ソケット) の場合、読み取り/書き込み I/O スペースが使い果たされている状態は、ターゲット ファイル記述子から読み書きされたデータの量をチェックすることによっても検出できます。たとえば、特定の量のデータを読み取るように要求して read(2) を呼び出し、read(2) がより少ないバイト数を返す場合、ファイル記述子の読み取り I/O スペースを使い果たしたことを確認できます。write(2) を使用して書き込む場合も同様です。(監視対象のファイル記述子が常にストリーム指向のファイルを参照することを保証できない場合は、この後者の手法を避けてください。)