LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2679|回复: 3

epoll的 EPOLLOUT事件一般怎样用?

[复制链接]
发表于 2008-6-6 18:02:39 | 显示全部楼层 |阅读模式
socket在什么情况下会触发可写这个事件?
如果没有触发这个事件但是往里面写数据会怎样?(连接已建立的情况下)
发表于 2008-6-7 08:05:12 | 显示全部楼层
就是 socket 可以写的情况。通常意味着写缓冲没有满。如果你编写的程序的网络 IO 不大,一次写入的数据不多的时候,通常都是 epoll_wait 立刻就会触发 EPOLLOUT 了。

如果你不调用 epoll,直接写 socket,那么情况就取决于这个 socket 的缓冲区是不是足够了。如果缓冲区足够,那么写就成功。如果缓冲区不足,那么取决你的 socket 是不是阻塞的。要么阻塞到写完成,要么出错返回。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-7 13:48:37 | 显示全部楼层
Post by jeff_yecn;1860014
就是 socket 可以写的情况。通常意味着写缓冲没有满。如果你编写的程序的网络 IO 不大,一次写入的数据不多的时候,通常都是 epoll_wait 立刻就会触发 EPOLLOUT 了。

如果你不调用 epoll,直接写 socket,那么情况就取决于这个 socket 的缓冲区是不是足够了。如果缓冲区足够,那么写就成功。如果缓冲区不足,那么取决你的 socket 是不是阻塞的。要么阻塞到写完成,要么出错返回。


那如果我用的不是边缘触发,而且很多socket可写,但是我又没数据要写,那岂不是一直在wait循环白打转。。?
回复 支持 反对

使用道具 举报

发表于 2008-6-10 22:47:10 | 显示全部楼层
如果没有数据要写, 就不要把相应的socket加入epoll事件. ET一般只用于EPOLLIN, 很少用于EPOLLOUT. ET用于read的时候要去一次将数据读完, 用于写的时候要求一次把数据缓冲区写满, 它要求用NON-block的fd, read和write都要遇到EAGAIN(man epoll).
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表