1. 尝试strace 或 jstack 去追踪程序,发现某一个进程作为socket连接server出现如下的log(strace追踪):

1. ioctl(45,[0],0) = 0
2. ........
3. ioctl(45,[12],0) = 12

ioctl作为用户态和内核态的数据交互,按照最简单的方式理解:

ioctl询问内核是否有资源/数据可取,返回len>0则调用系统接口read读取资源/数据,接着处理后续的业务逻辑。

该过程应该很容易理解。

2. 了解ioctl的作用

搜索的一些资料: “ioctl函数里面都实现了多个的对硬件的操作,通过应用层传入的命令来调用相应的操作”。

3. read作为一个阻塞型的接口,在socket接收数据过程中是否有其他影响。

当服务器读取数据,通过read,一旦客户端异常退出,该处read阻塞,导致一直等待下去。

while(1)
{
int len;
len = read(fd,buffer,0);
if(len > 0)
do_what_do();
}

当客户端发来10段数据:

1. 当while(1)是在一个线程里面跑的部分程序,len>0则处理第一段数据,进入do_what_do,在处理do_what_do过程中是无法继续在read读取数据。

10段数据只能一段一段进行处理。

2. 若对应do_what_do有10个不同数据源发过来的设备,可以开线程进行处理。(所谓并发)

最新文章

  1. xamarin uwp数字证书公钥私钥
  2. sharepoint
  3. php生成html文件的多种方法介绍
  4. Python全栈开发day7
  5. OS存储器管理(一)
  6. Ehcache与Guava Cache的区别浅谈
  7. (原)android中的动画(二)
  8. 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
  9. jquery :checked(过滤选择器) 和 空格:checked(后代选择器)
  10. 3、使用Oracle Logminer同步Demo
  11. C#读取shapefile文件(不用AE)
  12. JS之mouseover和mouseenter
  13. jenkins相关
  14. Ext.net 异常统一管理,铥掉可恶的 Request Failure
  15. Many To one 多对一
  16. 导入一个AndroidStudio工程作为一个Library Module
  17. 算法导论学习---红黑树具体解释之插入(C语言实现)
  18. ssh远程登录报错REMOTE HOST IDENTIFICATION HAS CHANGED!解决方式及原因
  19. django默认模板引擎和jinja2模板引擎
  20. c++ 一个h文件里面定义一个主类,然后定义多个子类

热门文章

  1. VUE3 之 动画与过渡的实现 - 这个系列的教程通俗易懂,适合新手
  2. MCU与MPU的基本区别
  3. 基于nodejs的阿里云DDNS服务,支持多网卡绑定
  4. 配置IPv6地址跳变——网络测试仪实操
  5. 安装python和pycharm,以及常见安装问题
  6. C#正则表达式(通俗易懂)
  7. WIN10:删除开始菜单栏中的文件夹
  8. MySQL日常笔记第二讲
  9. 堪比JMeter的.Net压测工具 - Crank 入门篇
  10. 有关base64的作业