对于epoll下的et模式写情况下的break处理

代码没看,老老实实用level triggering有什么不好?
■网友
写加个队列做写数据的缓存,每个buffer都要记录写入的位置。调用写数据的接口的时候就吧数据先放到队列里。然后不管现在的socket可写状态直接处理队列。在事件处理的回调里直接处理。collie/tcpsocket.d at master · putaolabs/collie · GitHubcollie用的是ET模式。在:243~286是处理队列的。120~150 是写函数做写入队列的操作。语言是D,可以当作C++看。逻辑部分无压力。
■网友
当errno为EAGAIN时,表示缓冲区已满,继续write只会返回EGAIN,无法写出任何数据。上面的代码其实还是有问题的,当nwrite\u0026lt;n就break,可能会漏掉EPOLLOUT事件的(我在实际的运行的例子中碰到nwrite\u0026lt;n时,第二次再write还能够继续写出数据),最准确的判断是返回了EAGAIN才break如果你的数据没有写完,那么epoll_wait会在socket的缓冲区有剩余空间时,返回EPOLLOUT事件,处理这个事件时,继续写出即可。epoll的帮助中特别提到ET模式使用中的两个要点:i with nonblocking file descriptors; and #使用非阻塞IOii by waiting for an event only after read(2) or write(2) return EAGAIN. #返回EAGAIN之后才能调用epoll_wait这里有ET模式的例子handy/epoll-et.cc at master · yedf/handy · GitHubepoll LT/ET 深度剖析
■网友
记录下写到哪了,然后下次EPOLLOUT来的时候,再从那个位置继续写
■网友
http://m.oschina.net/p/56vfs可以参考下


    推荐阅读