社区
C语言
帖子详情
使用epoll时需要将socket设为非阻塞吗?
tom555cat
2014-05-01 08:04:14
在APUE中介绍select和poll中说“一个描述阻塞与否并不影响select是否阻塞。也就是说,如果希望读一个非阻塞描述符,并且以超时值5s调用select,则select最多阻塞5s。”
我看到有些程序使用epoll时,使用fcntl将描述符置为非阻塞。这个和上面描述的有冲突没?
...全文
625
8
打赏
收藏
使用epoll时需要将socket设为非阻塞吗?
在APUE中介绍select和poll中说“一个描述阻塞与否并不影响select是否阻塞。也就是说,如果希望读一个非阻塞描述符,并且以超时值5s调用select,则select最多阻塞5s。” 我看到有些程序使用epoll时,使用fcntl将描述符置为非阻塞。这个和上面描述的有冲突没?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
beginning1126
2015-10-29
打赏
举报
回复
水平触发,只要可读或可写,事件会一直触发 边缘触发,只有从不可读变为可读、从不可写变成可写,事件才会触发 基于此,水平触发,socket不需要设置为non-block,因为只要触发,就可以读或写。 而对于水平触发,事件一旦触发,需要用户一直读,直到缓冲区数据全部读完为止才可以,如果设置为block,在没有数据可读时,就block了,需要用eagain错误来告知用户,数据读完了,不用再读了。
hithu2008
2015-08-14
打赏
举报
回复
我理解,et的epoll需要循环,多次对fd进行读取,读取到无数据后,应该获取到一个错误,表示本次数据读取完成。 如果用非阻塞模式,则不会得到一个错误,而是将读取动作阻塞,这样造成epoll程序阻塞住。
ramboww
2014-09-23
打赏
举报
回复
引用 3 楼 wallwind 的回复:
边缘触发是要设置成非阻塞,成因为边缘触发本身不是一次性读完数据的。
能否再具体点,为什么不是一次性读完数据的 就需要nonblock?
tom555cat
2014-05-02
打赏
举报
回复
引用 3 楼 wallwind 的回复:
边缘触发是要设置成非阻塞,成因为边缘触发本身不是一次性读完数据的。
那是不是比水平触发写程序需要注意更多的东西,也就是要不断地读取直到缓冲空,而水平触发就不需要这么做?
mhtlee
2014-05-02
打赏
举报
回复
引用 3 楼 wallwind 的回复:
边缘触发是要设置成非阻塞,成因为边缘触发本身不是一次性读完数据的。
这个问题问的很不错,我最近也在疑惑问题,楼上的大牛是否可以讲的再详细一点 @wallwind
ctreewang
2014-05-01
打赏
举报
回复
边缘触发是要设置成非阻塞,成因为边缘触发本身不是一次性读完数据的。
Pump天天学习
2014-05-01
打赏
举报
回复
epoll有两种工作模式 其中ET要设置非阻塞
mujiok2003
2014-05-01
打赏
举报
回复
The epoll interface, when used with the EPOLLET flag ( Edge Triggered ) should use non-blocking file descriptors
to avoid having a blocking read or write starve the task that is handling multiple file descriptors
具体你看看
这个
同
时
打开多端口的通信程序
采用
Socket
通讯协议进行 一个可以同
时
打开多端口 客户端及服务端通信的 自定义命令解析试验程序。 里面抱含了一个原生数据库ADO操作类,初数sockt及ADO数据库操作者很值得一看。
Unix/Linux编程:
使用
epoll
时
需要
将
socket
设为
非阻塞
吗?
结论 提出这个问题说明对网络编程的一些基本原理未搞明白,先说下结论: 一个
socket
是否设置为阻塞模式,只会影响到connect/accept/send/recv四个
socket
API函数,不会影响到select/poll/
epoll
_wait函数,后三个函数的超
时
或者阻塞
时
间是由其函数自身参数控制的 原理分析 下面详细的解释,为了方便解释,在这之前我们先明确几个基础概念: connfd:创建
socket
,主动发起连接的一端(客户端),该端调用connect函数主动发起连接 listenfd:创建
WebServer为什么
需要
将
socket
设置为
非阻塞
?
目录一些基本概念解释1.
socket
文件描述符有哪些2.
socket
文件描述符设置为阻塞的影响二、
使用
epoll
模型将
socket
设置为
非阻塞
1.listenfd
非阻塞
2.clientfd
非阻塞
(1)
epoll
的ET模式(2)
epoll
返回读写事件,但不一定真的可读写小结 一些基本概念解释 1.
socket
文件描述符有哪些 网络中的客户端和服务器进行连接通信
时
需要
建立连接,服务器端
需要
两个
socket
文件描述符,分别是建立连接
时
需要
的监听文件描述符listenfd和连接完成后的已连接文件描述符clientf
为什么
epoll
需要
将
socket
设置为
非阻塞
clientfd和listenfd设置为
非阻塞
的行为
C语言
70,035
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章