AF_UNIX和AF_INET域的socket在epoll中的差异
1.AF_UNIX & SOCK_STREAM
1.1 accept_socket BLOCK EPOLLIN|EPOLLET
1.2 accept_socket NON-BLOCK EPOLLIN|EPOLLET
1.3 accept_socket BLOCK EPOLLIN
1.4 accept_socket NON-BLOCK EPOLLIN
2.AF_INET & SOCK_STREAM
2.1 accept_socket NON-BLOCK EPOLLIN
2.2 accept_socket BLOCK EPOLLIN
2.3 accept_socket NON-BLOCK EPOLLIN|EPOLLET
2.4 accept_socket BLOCK EPOLLIN|EPOLLET
1 & 2的差异:
a. AF_UNIX 的SOCK_STREAM的socket read,可以 epoll_wait到EPOLLIN、EPOLLHUP。当client端write后,server端epoll_wait收到EPOLLIN后,read出数据;当client端写入10个字节的数据 close socket并退出,server端每次read只读出1个字节,那么就可能存在server端的数据读入不全,怎么解决呢?见如下示例:
由于是EPOLLET触发,是有当状态发生变化时,才会触发事件,所以当client端一次写入10个字节,server端只会触发一次event使epoll_wait返回,然后read1个字节,之后呢显示的EPOLL_CTL_MOD一次EPOLLIN|EPOLLHUP,epoll_wait会继续收到EPOLLIN事件,将所有以写入的数据读出。
当client端退出时,server端会收到EPOLLIN|EPOLLHUP的event;为了使epoll_wait阻塞,因为client端已经断开,所有server端也没有必要维护这个socket,所以EPOLL_CTL_DEL。
b. 当socket为BLOCK时,缓冲区的数据被读空后,read返回0;当socket为NON-BLOCK时,缓冲区的数据被读空后,read返回-1且errno==EAGAIN;
going on......
AF_UNIX和AF_INET域的socket在epoll中的差异的更多相关文章
- AF_INET域与AF_UNIX域socket通信原理对比【转】
转自:https://www.cnblogs.com/lfxiao/p/9672797.html 1. AF_INET域socket通信过程 典型的TCP/IP四层模型的通信过程. 发送方.接收方依 ...
- AF_INET域与AF_UNIX域socket通信原理对比
原文 1. AF_INET域socket通信过程 典型的TCP/IP四层模型的通信过程. 发送方.接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的 ...
- Ajax跨域、Json跨域、Socket跨域和Canvas跨域等同源策略限制的解决方法
同源是指同样的协议.域名.port,三者都同样才属于同域.不符合上述定义的请求,则称为跨域. 相信每一个开发者都曾遇到过跨域请求的情况,尽管情况不一样,但问题的本质都能够归为浏览器出于安全考虑下的同源 ...
- ss 显示unix 域 的socket 缓冲区不正确
一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态, [root@localhost unix]# ss -auxp |grep -i server.o u_ ...
- 【转】select和epoll模型的差异
http://www.cppblog.com/converse/archive/2008/10/12/63836.html epoll为什么这么快 epoll是多路复用IO(I/O Multiplex ...
- socket网络编程中read与recv区别
socket网络编程中read与recv区别 1.read 与 recv 区别 read 原则: 数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待.所以一般情况下:我们读取数据都需要采用 ...
- Ajax跨域(CROS)请求中的Preflighted requests
Ajax跨域(CROS)请求中的Preflighted requests:https://www.aliyun.com/jiaocheng/862989.html 10 分钟理解跨域请求:https: ...
- php socket模拟http中post或get提交数据
php socket模拟http中post或者get提交数据的示例代码. 代码: sock_post.php: <?php /** * php socket模拟post\get请求 * 编辑:脚 ...
- 非阻塞socket与epoll
阻塞socket. –阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. –对于文件操作read,fread函数调用会将线程阻塞. –对于socket,accept与re ...
随机推荐
- [CF911A]Nearest Minimums
题目大意: 给你一个数列,问数列中最小数的最近距离. 思路: 直接模拟即可. #include<cstdio> #include<cctype> #include<alg ...
- 求一个整数个位数之和 Exercise06_02
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求一个整数个位数之和 * */ public class Exercise ...
- Mapper动态代理开发
在开发的过程中只需要写Dao层的借口,无需写其实现类,实现类有框架自己补充. 框架是根据mapper文件自动补充的,因此需要满足下面四个条件 Mapper接口开发需要遵循以下规范: Mapper.xm ...
- RxJava 2.x 理解-2
操作符总结: http://reactivex.io/documentation/operators.html https://github.com/ReactiveX/RxJava/wiki Ope ...
- [置顶] Windows显示驱动(WDDM)编程初步(2)
欢迎转载[作者:张佩][原文:http://www.yiiyee.cn/Blog/wddm2/] 第二部分专门只讲VIDPN.这是后面内容的基础.WDDM框架用VIDPN这个概念,来描述它所要处理的显 ...
- TOleDBMSSQLConnectionProperties驱动MSSQL数据库
TOleDBMSSQLConnectionProperties驱动MSSQL数据库 为了让MORMOT可以驱动所有版本的MSSQL,需要改用SQLOLEDB,因为所有的WINDOWS操作系统里面都提供 ...
- [Python爬虫] 之二十三:Selenium +phantomjs 利用 pyquery抓取智能电视网数据
一.介绍 本例子用Selenium +phantomjs爬取智能电视网(http://news.znds.com/article/news/)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字 ...
- 对jsp中Url含中文字符的编码处理
有一段url="/app/index/index.jsp?userName='测试'":在传入到jsp页面后. 用 <% String userName=request.g ...
- java.io.IOException: Attempted read from closed stream. 异常,解决
在HttpClient请求的时候,返回结果解析时出现java.io.IOException: Attempted read from closed stream. 异常,解决 原因是EntityUti ...
- jQuery编程小结
加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址. <script t ...