送信するデータがある場合、epoll を使用して特定の TCP ソケットに書き込み可能かどうかを知るアプリケーションがあります。
私が観察しているのは、TCP 接続の遠端が遅れ、TCP ソケットの送信バッファがいっぱいになり始めると、epoll が EPOLLOUT イベントを返す頻度が指数関数的なバックオフを経験しているように見えることです。この動作は、ソケット書き込みから EAGAIN を受け取る前に発生します。
アプリケーションは EPOLLONESHOT を使用しており、EPOLL_CTL_MOD 呼び出しを行って、EPOLLOUT イベントが発生するたびに再準備します。しかし、上で述べたように、EAGAIN が最終的に発生するまで、後続の各発生は指数関数的に遅くなります (40 ミリ秒、80 ミリ秒、160 ミリ秒、320 ミリ秒、640 ミリ秒、1280 ミリ秒などの進行がありました)。
これは epoll の文書化されていない機能ですか? 無効にできますか?データが古くなっているので問題です。遅れて送信するよりも破棄したいと思います。
前もって感謝します。