我有一個應用程序,當它有數據要傳輸時,使用epoll來知道給定的TCP套接字是否可以寫入。epoll有指數回退嗎?
我在觀察的是,由於TCP連接的遠端落後,並且TCP套接字的發送緩衝區開始填充,所以epoll返回EPOLLOUT事件的頻率似乎經歷了指數退避。這種行爲發生在從套接字寫入接收EAGAIN之前。
應用程序正在使用EPOLLONESHOT,並在每次出現後重置EPOLL_CTL_MOD調用以重新設置EPOLLOUT事件。但正如我上面提到的那樣,隨後的每一次事件都會以指數形式出現(我有40ms,80ms,160ms,320ms,640ms,1280ms等等),直到EAGAIN最終發生。
這是epoll的一個未記錄的功能嗎?它可以被禁用?這是一個問題,因爲數據越來越陳舊,我寧願放棄它,而不是發送遲到。
在此先感謝。
如果陳舊的數據是一個問題,請使用UDP而不是TCP;這就是爲什麼這兩個協議是發明的。 – msw 2013-05-02 00:26:41