我正在使用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