• 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......

  • 相关阅读:
    自定义input file样式
    input text 不显示输入的历史记录
    白话 P-value
    R博客
    安装NXNET
    形象的解释神经网络激活函数的作用是什么?
    嵌入式选择与L1正则化
    “梯度下降法”理解
    控制台乱码
    R语言快捷键
  • 原文地址:https://www.cnblogs.com/black-mamba/p/7613321.html
Copyright © 2020-2023  润新知