什么时候需要使用Epoll_out
可参考知乎上的回答, 记录备忘.
http://www.zhihu.com/question/22840801
处理EPOLLIN的时候,就可以往sockfd里写了(如果需要的话),只不过这时候,套接字如果是非阻塞的,缓冲区写满了,返回EAGAIN , 然而判断send(write/sendfile)返回值发现数据并没有发完,想要接着把数据发出去,这时候就需要暂时记录一下现场,包括fd,当前发送到buffer的哪个字节了,什么的(可以用一个结构记录下来). 然后注册EPOLLOUT事件,等待下一次触发写事件.这时要先删除这个fd注册的写事件,之后找到fd对应的buffer(这个可以用map保存起来,以fd做键去找对应的结构),从原来的没有发完的偏移处继续发数据,发完了就删掉这个map或者将struct里置空. 没有发完就再注册写事件,记录这次的位置到哪了.等待下一次触发写.

浙公网安备 33010602011771号