社区
C语言
帖子详情
使用epoll时需要将socket设为非阻塞吗?
tom555cat
2014-05-01 08:04:14
在APUE中介绍select和poll中说“一个描述阻塞与否并不影响select是否阻塞。也就是说,如果希望读一个非阻塞描述符,并且以超时值5s调用select,则select最多阻塞5s。”
我看到有些程序使用epoll时,使用fcntl将描述符置为非阻塞。这个和上面描述的有冲突没?
...全文
569
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
wintree
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
具体你看看
这个
C++
socket
网络编程--http服务器(支持php)实战教学视频
本课程包含了
socket
网络编程常用的所有特性,包括tcp、udp协议的基础编程,广播包,超
时
连接,多路复用,高并发的
epoll
多路复用,多线程的服务端。课程讲解理论与实践相结合,实践以代码延
时
讲解为主。
Unix/Linux编程:
使用
epoll
时
需要
将
socket
设为
非阻塞
吗?
一个
socket
是否设置为阻塞模式,只会影响到connect/accept/send/recv四个
socket
API函数,不会影响到select/poll/
epoll
_wait函数,后三个函数的超
时
或者阻塞
时
间是由其函数自身参数控制的 原理分析 下面详细的解释...
WebServer为什么
需要
将
socket
设置为
非阻塞
?
目录一些基本概念解释1.
socket
文件描述符有哪些2.
socket
文件描述符设置为阻塞的影响二、
使用
epoll
模型将
socket
设置为
非阻塞
1.listenfd
非阻塞
2.clientfd
非阻塞
(1)
epoll
的ET模式(2)
epoll
返回读写事件,但不一定真...
使用
epoll
的
时
候是否要将
socket
设置成
非阻塞
?
epoll
有两种模式,分别是水平触发(ET模式)和边沿触发(LT) 关于二者的区别,这里举一个例子,A向B一次发送了4K的数据,此
时
B已经调用了的
epoll
_wait会返回,这
时
假设B只读了2K的数据,还剩余2K未读。 此
时
水平触发和...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章