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中的差异的更多相关文章

  1. AF_INET域与AF_UNIX域socket通信原理对比【转】

    转自:https://www.cnblogs.com/lfxiao/p/9672797.html 1.  AF_INET域socket通信过程 典型的TCP/IP四层模型的通信过程. 发送方.接收方依 ...

  2. AF_INET域与AF_UNIX域socket通信原理对比

    原文 1.  AF_INET域socket通信过程 典型的TCP/IP四层模型的通信过程. 发送方.接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的 ...

  3. Ajax跨域、Json跨域、Socket跨域和Canvas跨域等同源策略限制的解决方法

    同源是指同样的协议.域名.port,三者都同样才属于同域.不符合上述定义的请求,则称为跨域. 相信每一个开发者都曾遇到过跨域请求的情况,尽管情况不一样,但问题的本质都能够归为浏览器出于安全考虑下的同源 ...

  4. ss 显示unix 域 的socket 缓冲区不正确

    一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态, [root@localhost unix]# ss -auxp |grep -i server.o u_ ...

  5. 【转】select和epoll模型的差异

    http://www.cppblog.com/converse/archive/2008/10/12/63836.html epoll为什么这么快 epoll是多路复用IO(I/O Multiplex ...

  6. socket网络编程中read与recv区别

    socket网络编程中read与recv区别 1.read 与 recv 区别 read 原则: 数据在不超过指定的长度的时候有多少读多少,没有数据则会一直等待.所以一般情况下:我们读取数据都需要采用 ...

  7. Ajax跨域(CROS)请求中的Preflighted requests

    Ajax跨域(CROS)请求中的Preflighted requests:https://www.aliyun.com/jiaocheng/862989.html 10 分钟理解跨域请求:https: ...

  8. php socket模拟http中post或get提交数据

    php socket模拟http中post或者get提交数据的示例代码. 代码: sock_post.php: <?php /** * php socket模拟post\get请求 * 编辑:脚 ...

  9. 非阻塞socket与epoll

    阻塞socket. –阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. –对于文件操作read,fread函数调用会将线程阻塞. –对于socket,accept与re ...

随机推荐

  1. [CF911A]Nearest Minimums

    题目大意: 给你一个数列,问数列中最小数的最近距离. 思路: 直接模拟即可. #include<cstdio> #include<cctype> #include<alg ...

  2. 求一个整数个位数之和 Exercise06_02

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求一个整数个位数之和 * */ public class Exercise ...

  3. Mapper动态代理开发

    在开发的过程中只需要写Dao层的借口,无需写其实现类,实现类有框架自己补充. 框架是根据mapper文件自动补充的,因此需要满足下面四个条件 Mapper接口开发需要遵循以下规范: Mapper.xm ...

  4. RxJava 2.x 理解-2

    操作符总结: http://reactivex.io/documentation/operators.html https://github.com/ReactiveX/RxJava/wiki Ope ...

  5. [置顶] Windows显示驱动(WDDM)编程初步(2)

    欢迎转载[作者:张佩][原文:http://www.yiiyee.cn/Blog/wddm2/] 第二部分专门只讲VIDPN.这是后面内容的基础.WDDM框架用VIDPN这个概念,来描述它所要处理的显 ...

  6. TOleDBMSSQLConnectionProperties驱动MSSQL数据库

    TOleDBMSSQLConnectionProperties驱动MSSQL数据库 为了让MORMOT可以驱动所有版本的MSSQL,需要改用SQLOLEDB,因为所有的WINDOWS操作系统里面都提供 ...

  7. [Python爬虫] 之二十三:Selenium +phantomjs 利用 pyquery抓取智能电视网数据

    一.介绍 本例子用Selenium +phantomjs爬取智能电视网(http://news.znds.com/article/news/)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字 ...

  8. 对jsp中Url含中文字符的编码处理

    有一段url="/app/index/index.jsp?userName='测试'":在传入到jsp页面后. 用 <%  String userName=request.g ...

  9. java.io.IOException: Attempted read from closed stream. 异常,解决

    在HttpClient请求的时候,返回结果解析时出现java.io.IOException: Attempted read from closed stream. 异常,解决 原因是EntityUti ...

  10. jQuery编程小结

    加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址. <script t ...