多路复用与设置阻塞、非阻塞模式 - To be, or not to be: that is the question - 博客频道 - CSDN.NET

多路复用与设置阻塞、非阻塞模式

分类: Linux/Unix C/C++ Network Program 2009-10-06 20:30 202人阅读 评论(0) 收藏 举报

阻塞和非阻塞模式使用fcntl()可以进行设置,linux下默认的是阻塞模式,windows下相反。下面讲述设置模式三步骤:

1、获取模式标识

int  mode_flag;  listen_socket;

mode_flag = fcntl(listen_socket,F_GETFL,0);

2、设置模式标识为目标模式。非阻塞模式为O_NONBLOCK,阻塞模式为~O_NONBLOCK。这里以阻塞模式为例。

mode_flag&=~O_NONBLOCK;

3、将套接字设置为模式标识所表示的模式

fcntl(listen_socket,F_SETFL,mode_flag);

另外,使用ioctl()也可以设置阻塞和非阻塞模式。

int b_on=1;

ioctl(listen_socket,FIONBIO,&b_on);

通过setsockopt()可以设置端口可被多次绑定,以达到多路复用的目的。

setsockopt(listen_socket,(struct sockaddr *)&servaddr,sizeof(servaddr));

多路复用与设置阻塞、非阻塞模式相关推荐

  1. java socket 阻塞模式_(四) 如何将socket设置为非阻塞模式

    1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket(    _In_ int af,   ...

  2. 为何epoll的ET模式文件要设置为非阻塞?

    是因为ET模式只在socket描述符状态发生变化时才触发事件,如果不一次把socket内核缓冲区的数据读完,会导致socket内核缓冲区中即使还有一部分数据,该socket的可读事件也不会被触发.因此 ...

  3. 将socket设置为非阻塞(non-blocking) - 艾子的日志 - 网易博客

    将socket设置为非阻塞(non-blocking) - 艾子的日志 - 网易博客 将socket设置为非阻塞(non-blocking) 2011-02-17 22:36:51|  分类: 默认分 ...

  4. linux socket 阻塞非阻塞设置 fcntl,F_GETFL,F_SETFL,flags

    1.获取文件的flags,即open函数的第二个参数: flags = fcntl(fd,F_GETFL,0); 2.设置文件的flags: fcntl(fd,F_SETFL,flags); 3.增加 ...

  5. Linux学习之系统编程篇:管道设置为非阻塞及管道的读写行为

    一.管道设置为非阻塞 管道默认读写两端都是堵塞属性,那么怎能才能设置成非阻塞呢? (1)设置读端非阻塞 获得原来的属性 flag: int flags = fcntl(fd[0], F_GETFL); ...

  6. python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用

    用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...

  7. linux下阻塞的系统调用,Linux下socket设置为非阻塞方式和fcntl系统调用.pdf

    Linux 下 socket 设置为非阻塞方式和 fcntl 系统调用 [ 日期: 2011-04-16] 来源: Linux 社区 作者: Linux 用以下方法将 socket 设置为非阻塞方式 ...

  8. 同步异步阻塞非阻塞杂记

    版权声明:本文可能为博主原创文章,若标明出处可随便转载. https://blog.csdn.net/Jailman/article/details/78498458 gevent实现的协程是同步非阻 ...

  9. 确定不来了解一下什么是 BIO NIO AIO 阻塞 非阻塞 同步 异步?

    本文内容涉及同步与异步, 阻塞与非阻塞, BIO.NIO.AIO等概念, 这块内容本身比较复杂, 很难用三言两语说明白. 而书上的定义更不容易理解是什么意思. 下面跟着我一起解开它们神秘的面纱. BI ...

  10. 同步/异步 阻塞/非阻塞区别

    我喜欢用自己的语言通过联系现实生活中的一些现象解释一些概念,当我能做到这一点时,说明我已经理解了这个概念.今天要解释的概念是:同步/异步与阻塞/非阻塞的区别. 这两组概念常常让人迷惑,因为它们都是涉及 ...

最新文章

  1. php addall,ThinkPHP3.2框架使用addAll()批量插入数据的方法
  2. java报表工具FineReport使用中遇到的常见报错及解决办法(三)
  3. 使用纯 Win32 API 编程实现Winpcap 封包捕获的第一个例子
  4. 马云缺席的一个半小时,李彦宏和马化腾都聊了什么
  5. XHTML与HTML的区别
  6. shell编程之进阶篇二常见运算符号
  7. java环境卡顿_解决Emacs在windows使用的问题,比如环境设置、卡顿……
  8. js字符串编码和unicode编码互转
  9. [php] laravel predis 使用 hscan 和 scan
  10. 两阶段最小二乘法TSLS案例分析
  11. Python乌龟吃鱼小游戏
  12. mysql创建索引视图_mysql中创建视图、索引
  13. oracle按年同比环比,oracle中sum和case when的结合使用(求同比和环比)
  14. vue less 换肤
  15. DV EV OV证书
  16. Tailwind CSS如何单页面使用并压缩tailwindcss
  17. Linux修改fstab引起系统无法启动问题的解决方法
  18. 5G QoS控制原理专题详解-基础概念
  19. Linux hosts.allow与hosts.deny文件设置
  20. 微信小程序跳转h5链接(web-view)

热门文章

  1. java序列化的方法_【Java常见序列化与反序列方法总结】
  2. python获取excel数据进行判断输出结果到excel,如何使用python xlrd/xlwt从一个excel工作簿提取数据并输出到另一个excel工作簿?...
  3. xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
  4. 计算机概论在线阅读,计算器概论 or 计算机概论
  5. BeycondCompare3破解绿色版下载
  6. 在 Windows 命令提示符下启动 MySQL:net start mysql 发生系统错误 5。 拒绝访问。解决方式小结
  7. 编译原理:文法及其二义性(判定及消除)
  8. 联想g510升级方案_联想智慧中国行,聚焦第一古城,助力企业智能升级
  9. plsql视图添加表字段_Oracle-单表多字段查询(不使用*)
  10. python程序显示自己的版权_手把手教你Pycharm皮肤主题及个性化设置,python程序员必备-Go语言中文社区...