我正在使用epoll將大型消息寫入使用HTTP協議的服務器。 fds全部設置爲非阻塞狀態,我正在使用邊緣觸發的事件。我知道EPOLLIN我需要循環讀取fd,直到EAGAIN返回。對於編寫,我不確定一旦獲得EAGAIN後是否應該繼續循環,或者是否應該等待epoll通知fd何時可以再次讀取。例如,我正在寫一條20K的消息,並且在第一個::寫入嘗試中發送的數據量= 13K。下一次嘗試寫入將返回retVal = -1和errno = EAGAIN。寫入文件描述符時的epoll行爲
此時我應該繼續在一段時間內循環(1),直到我可以寫入數據,或者當FD準備再次寫入時,我應該等待epoll調用我的回調。我的理解是,由於fd是註冊書寫,所以當FD準備再次寫入時,epoll應通知我。但是,這似乎並沒有發生在我的程序中。
我是否需要設置特殊標誌或修改FD來獲取通知?
詹姆斯,謝謝你的迴應。我在代碼中存在一個錯誤 - 這就是爲什麼一旦它可用於再次寫入時,我沒有在fd上收到EPOLLET事件。它現在按預期工作。 – user1290156 2012-03-27 15:29:07