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. [Codeforces 35E] Parade

    Link: Codeforces 35E 传送门 Brief Intro: 给定$n$个矩形,求出轮廓线的所有顶点 Solution: 对于此类可拆分成多个事件点的题目,使用扫描线的方式 将每个矩形分 ...

  2. POJ 3692 Kindergarten(最大独立集)

    [题目链接] http://poj.org/problem?id=3692 [题目大意] 男生相互之间都认识,女生相互之间也都认识, 一些男生和一些女生相互之间也认识,求找出最多的人参加派对, 他们相 ...

  3. 【字符串哈希】bzoj3916 [Baltic2014]friends

    枚举断点,哈希判断. #include<cstdio> using namespace std; typedef unsigned long long ull; ull hs,hs1,hs ...

  4. 【二分】bzoj2083 [Poi2010]Intelligence test

    v[x]记录了x值的出现位置序列. 对每个b中的元素,每次在v[b[i]]中二分. 因此要记录上一次二分到了a数组的哪个位置. #include<cstdio> #include<v ...

  5. codevs 4163 求逆序对的数目 -树状数组法

    4163 hzwer与逆序对  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果 ...

  6. IntelliJ IDEA控制台输出中文乱码问题解决

    如果还不行,那么再极端的设置,在IDEA启动的时候强制设置为UTF-8: 打开增加-Dfile.encoding=UTF-8,重启Intellij IDEA 再或者直接在项目运行的时候加入UTF-8的 ...

  7. shell基本计算、逻辑运算、位运算详解

    转:http://blog.chinaunix.net/uid-8504518-id-3918531.html Shell 提供大量的基本运算操作,在脚本中非常有用.Shell 对您提供的算术表达式求 ...

  8. Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作

    matalb具有灵活的图像处理,代码编写起来简洁而高效.而OpenCV具有很多成熟的计算机视觉算法,能够处理很多实时的识别处理等问题,而且代码运行起来效率很高.所以如何结合两者之间的优点,是让很多学术 ...

  9. 网络流量工具iftop,ifstat

    此文非原创,转自 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html 介绍 ifstat工具是个网络接口监测工具,比较简单 ...

  10. Mybatis c3p0 整合

    1.下载c3p0 2.实现 UnpooledDataSourceFactory package com.joinhealth.esb.db; import org.apache.ibatis.data ...