对于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可以参考下
推荐阅读
- 卫星视角下的青海易地扶贫搬迁之力:开门是景,关门是家
- 5.1声道片源对于没有5.1硬件系统的用户来说有意义吗
- 汽车知识|长安旗下的B级精品车,动力有T,配置厚道,起步8.49万
- |常州天宁:检察建议让“忙道”回归盲道
- 武汉一家人重返吉林北大湖:只为“偿还”欠下的雪票
- 英雄联盟快捷键Q、E、R咋操作呢
- 互联网金融行业下的SPV公司咋做账
- |WEY品牌智能驾控PK赛,读懂智能科技下的全新出行方式
- o2o模式的电商怎么样进行线上线下的引流
- 2017年iPhone性价比最高的是哪款产品
