Linux accept和FD_xxx的使用

news/2024/11/20 4:34:09/

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

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

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

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


http://www.ppmy.cn/news/1198054.html

相关文章

Voice vlan、ICMP、单臂路由、mux-vlan

目录 一,Voice VLAN Voice vlan配置命令 一,问:已知网络中一台服务器的IP地址,如何找到这太服务器在哪台交换机的哪个接口上​编辑 思路: 二,ICMP协议 三,ICMP案例分析​编辑 四&#xf…

pycharm插件推荐:一款能够根据上下文自动提示帮写代码的AI插件

直接上插件: 这个插件有多牛!他能够根据注释帮你直接补全代码(只需要你按一下tab键),甚至还有学习的能力。 如下: 我注释写完后,一回车就模糊的写出了预计的代码,只要我按下tab键…

0005Java安卓程序设计-ssm基于Android的网店系统

文章目录 **摘要**目录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 摘要 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网上管…

大数据之陌陌聊天数据分析案例

目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量,发送和接收用户数 3.…

2024最新mac电脑清理垃圾的软件有哪些?

mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…

本地部署Jellyfin影音服务器并实现远程访问影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…

【C++那些事儿】类与对象(1)

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动有趣。而C作为一门接近底层的语言,无疑是抽象且难度颇…

亚马逊 JDK下载地址

下载地址 https://docs.aws.amazon.com/corretto/选择版本 选择操作系统 比如 windows64 位 可以选择安装包或者解压版本 msi 的为安装版 zip 的为解压版