社区
Linux/Unix社区
帖子详情
为什么要不套接字设置成为非阻塞模式
wangzhaoyang121
2013-03-21 11:46:02
为什么要把套接字设置为非阻塞模式?
与阻塞模式比较,非阻塞模式有什么优势?
什么情况下用非阻塞模式?
套接字设置非阻塞方法:
一种是:通过fcntl(fd, F_SETFL, NOBLOCK)加select;
第二种:直接是select();
请各个大侠指教!!!
...全文
375
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
设置
套接字
的
非阻塞
模式
本文介绍了如何在Windows Sockets API中将
套接字
设置
为
非阻塞
模式
,主要通过ioctlsocket()函数实现。在
非阻塞
模式
下,recv()等函数在无数据可读时会返回WSAEWOULDBLOCK错误,需要循环调用来处理数据。同时提到了错误处理和bind()、WSAStartup()等函数在
非阻塞
模式
下的行为。
C++
设置
套接字
为
非阻塞
套接字
实战
本文介绍如何使用fcntl系统调用将
套接字
设置
为
非阻塞
模式
,并提供了具体的C++代码示例。通过调用自定义的setnonblocking函数,可以检查并改变
套接字
的工作
模式
。
UDP服务recvfrom函数
设置
非阻塞
本文介绍了两种将UDP
套接字
设置
为
非阻塞
模式
的方法:一是使用fcntl函数直接
设置
套接字
为
非阻塞
;二是通过
设置
SO_RCVTIMEO选项来间接达到
非阻塞
的效果。文章提供了详细的C++源代码示例。
监听
套接字
为什么要
设置
成
非阻塞
的?
本文深入探讨了在网络通信中,监听
套接字
在阻塞与
非阻塞
模式
下,accept()函数的行为差异。特别是在客户端突然关闭连接的情况下,
非阻塞
模式
能够避免accept()阻塞,立即返回错误,而阻塞
模式
则会等待直至新的连接到达。
突破编程_C++_网络编程(Windows
套接字
(阻塞
模式
与
非阻塞
模式
))
本文介绍了Windows
套接字
的阻塞与
非阻塞
模式
。阻塞
模式
下,I/O操作不能立即完成时线程会被阻塞,适用于实时性要求不高、I/O操作不频繁的场景;
非阻塞
模式
下,操作会立即返回,线程不被阻塞,适用于实时性要求高、处理大量并发I/O的场景。还给出了两种
模式
的编程示例。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章