社区
Linux/Unix社区
帖子详情
为什么要不套接字设置成为非阻塞模式
wangzhaoyang121
2013-03-21 11:46:02
为什么要把套接字设置为非阻塞模式?
与阻塞模式比较,非阻塞模式有什么优势?
什么情况下用非阻塞模式?
套接字设置非阻塞方法:
一种是:通过fcntl(fd, F_SETFL, NOBLOCK)加select;
第二种:直接是select();
请各个大侠指教!!!
...全文
377
7
打赏
收藏
为什么要不套接字设置成为非阻塞模式
为什么要把套接字设置为非阻塞模式? 与阻塞模式比较,非阻塞模式有什么优势? 什么情况下用非阻塞模式? 套接字设置非阻塞方法: 一种是:通过fcntl(fd, F_SETFL, NOBLOCK)加select; 第二种:直接是select(); 请各个大侠指教!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Roxxette
2013-03-23
打赏
举报
回复
实际应用中主要是对套接字读写添加超时控制
zz_d
2013-03-22
打赏
举报
回复
当你需要读取套接字立即返回, 设置成非阻塞. 当你一定要读到数据, 设置成阻塞.
nostopstep
2013-03-22
打赏
举报
回复
这个问题其实问的很不错,未解决这样的问题,正像二楼所说,要说清楚,得一大堆,因此,你可以看一下5中IO模式,完成端口作为重点查看。高性能服务器的网络通信都是用非阻塞模式。这里面涉及到的东西也很多。涵盖了多线程、线程池、线程同步和数据互斥等。正式网络传输的精华所在。
恨天低
2013-03-21
打赏
举报
回复
要解释得说一堆的话。 《Unix网络编程》第一卷,第六章,IO复用。自己去看一遍。
skyandcode
2013-03-21
打赏
举报
回复
阻塞程序就停止在那里了当然不好啊,非阻塞可以可以马上返回做别的事。 select方法效率太低了,要一直去监视有没有事件到来很耗时间。 其它方法很多,最有效的是完成端口模型。我的博客有简单的介绍可以看看。
youngwolf
2013-03-21
打赏
举报
回复
select与阻不阻塞没有关系,它不会修改套接字的属性的; 在阻塞状态下,某些时候,用select poll epoll仍然不能解决阻塞的问题,此时就需要设置为非阻塞,比如: 你要写的时候,select告诉你可写,但由于你写得太多,所以仍然可能阻塞; 你用epoll在ET模式下时,必须设置为非阻塞,因为你要读取完所有的数据,epoll_wait才会再次触发,此时一般用非阻塞模式,一直读到出错为止。 当然,似乎是有些函数,可以知道某个套接字现在读写缓存里面有多少数据,有多大的剩余,但我从来没用过,这显然会损失效率的。
Carl_CCC
2013-03-21
打赏
举报
回复
第六章只讲了区别,看16章,非阻塞可以减少壁钟问题,书上说的,貌似很少用。
5.1.2
设置
套接字
的
非阻塞
模式
当使用socket()函数和WSASocket()函数创建
套接字
时,默认都是阻塞的。在创建
套接字
之后,通过调用ioctlsocket()函数,将该
套接字
设置
为
非阻塞
模式
。函数的第一个参数是
套接字
,第二个参数
设置
为FIONBIO,第三个参数
设置
为unsigned long类型的非零值。下面代码清单演示了如何用ioctlsocket()函数,
设置
套接字
为
非阻塞
模式
。SOCKET
C++
设置
套接字
为
非阻塞
套接字
实战
一点睛 把
套接字
设为
非阻塞
模式
后,很多Linsock函数会立即返回,但并不意味着操作已经结束。 二
设置
套接字
为
非阻塞
套接字
1代码 #include <sys/socket.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <uni...
UDP服务recvfrom函数
设置
非阻塞
基本概念: 方法一:通过fcntl函数将
套接字
设置
为
非阻塞
模式
。 方法二:通过
套接字
选项SO_RECVTIMEO
设置
超时。 方法一源码,编译:g++ udp_server.cpp -o server #include #include #include #include #include #include #include #include #include #i
监听
套接字
为什么要
设置
成
非阻塞
的?
常见的网络通信模型都会使用IO多路复用如select、poll、epoll等。当有新的连接请求到来时,监听
套接字
变为可读,然后调用accept()接收新连接、返回一个连接
套接字
。 如果监听
套接字
是阻塞的,问题可能出在什么地方? 先来看下TCP三次握手的示意图: 从图中可知,connect()会先于accep()函数返回。 当一个连接到来的时候,监听
套接字
可读,此时,我们稍微等一段时间之后再调用a...
突破编程_C++_网络编程(Windows
套接字
(阻塞
模式
与
非阻塞
模式
))
C++ 网络编程:Windows
套接字
(阻塞
模式
与
非阻塞
模式
)
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章