我正在使用epoll通过HTTP协议向服务器写入大量数据。 fds都被设置为非阻塞状态,并且我正在使用边缘触发事件。我知道对于EPOLLIN,我需要循环读取fd直到返回EAGAIN。对于写入,如果我得到了EAGAIN,我不确定是否应该继续循环,还是等待epoll通知fd再次可用于读取。
例如,我正在编写一条20K的消息,第一次::写入尝试时发送的数据量= 13K。下一次尝试写入返回retVal = -1和errno = EAGAIN。
此时,我应该在while(1)中继续循环直到可以写入数据,还是应该等待epoll在FD再次准备好写入时调用我的回调函数? 我的理解是,由于fd已注册为可写入,因此当FD再次准备好写入时,epoll应该通知我。但在我的程序中似乎并没有发生这种情况。
我需要设置特殊标志或修改FD以获得通知吗?
例如,我正在编写一条20K的消息,第一次::写入尝试时发送的数据量= 13K。下一次尝试写入返回retVal = -1和errno = EAGAIN。
此时,我应该在while(1)中继续循环直到可以写入数据,还是应该等待epoll在FD再次准备好写入时调用我的回调函数? 我的理解是,由于fd已注册为可写入,因此当FD再次准备好写入时,epoll应该通知我。但在我的程序中似乎并没有发生这种情况。
我需要设置特殊标志或修改FD以获得通知吗?