• Linux accept和FD_xxx的使用


    Linux socket accept功能的作用是在服务器端等待并接受客户端的连接请求。当有客户端尝试连接服务器时,服务器调用accept函数来接受该连接请求,并创建一个新的socket来与该客户端进行通信。

    具体来说,accept函数被动监听客户端的三次握手连接请求,三次握手成功即建立连接成功。所谓“新的”是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数据来完成的。


    FD_ZEROFD_SETFD_ISSET是用于处理文件描述符集合的函数,它们是UNIX和类UNIX系统(如Linux)中的系统调用。这些函数主要用于socket编程,特别是在处理多路复用(multiplexing)的情况下。

    1. FD_ZERO(fd_set *set): 这个宏用于清空一个文件描述符集。它将set指向的集初始化为空集。
    fd_set rdfs;
    FD_ZERO(&rdfs);
    
    • 1
    • 2
    1. FD_SET(int fd, fd_set *set): 这个宏用于将指定的文件描述符添加到指定的文件描述符集中。如果文件描述符fd不在set指向的集中,那么它就被添加进去;如果它已经在集合中,那么集合的状态不会改变。
    fd_set rdfs;
    int listen_sock = socket(AF_INET, SOCK_STREAM, 0); // 创建一个socket
    FD_SET(listen_sock, &rdfs); // 将socket的文件描述符添加到集合中
    
    • 1
    • 2
    • 3
    1. FD_ISSET(int fd, fd_set *set): 这个宏用于检查指定的文件描述符是否在给定的文件描述符集中。如果文件描述符在集合中,那么返回非零值;否则返回0。
    fd_set rdfs;
    int listen_sock = socket(AF_INET, SOCK_STREAM, 0); // 创建一个socket
    FD_SET(listen_sock, &rdfs); // 将socket的文件描述符添加到集合中
    if (FD_ISSET(listen_sock, &rdfs)) { // 检查socket的文件描述符是否在集合中
        // do something if it is in the set
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这三个函数的主要区别在于它们的作用:

    • FD_ZERO用于清空一个文件描述符集
    • FD_SET用于将一个文件描述符添加到一个文件描述符集
    • FD_ISSET用于检查一个文件描述符是否在一个文件描述符集

    注意:在使用这些函数时,必须保证文件描述符集已经被正确地初始化(例如,使用FD_ZERO进行初始化),并且要保证添加或检查的文件描述符是有效的。同时,这些函数都属于POSIX API的一部分,因此在某些非POSIX系统上可能无法使用。

  • 相关阅读:
    使用wireshark解密ipsec ISAKMP包
    acwing 795前缀和
    如何使用 ArcGIS Pro 制作边界晕渲效果
    基于vue框架的二手书交易网站
    Sd-CDA (自退化对比域适应框架):解决工业故障诊断中数据不平衡问题
    在Android和iOS上设置手机ip详细教程
    nginx反向代理,负载均衡,动静分离配置
    第三章:Python中的序列(上)
    索引失效的10种场景
    这么分页,小心有坑
  • 原文地址:https://blog.csdn.net/u013318019/article/details/134218907