gpt4 book ai didi

c++ - Fd 大于 1024 时 Select 和 FD_SET 的行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:05 25 4
gpt4 key购买 nike

据我所知,select只支持不超过1024个套接字。但是一个进程可以拥有 65535 个套接字,这意味着大多数套接字数都大于 1024,所以我有三个问题:

Q1。如果将大于 1024 的套接字号传递给 FD_SET() 会发生什么?
Q2。把所有socket号都大于1024的fd_set传给select()会怎么样?
Q3.在内核为 2.6.8、x86 64 位的 Linux Fedora 上,Q1 和 Q2 会抛出异常吗?

最佳答案

fd_set 是位数组,只能使用 FD_* 宏操作,因为 C 没有“位”类型。 (该类型在官方上是不透明的,并且可以以不同的方式实现 - 事实上 winsock 确实以不同的方式实现它 - 但所有类 unix 操作系统都使用位数组。)

所以这段代码:

fd_set my_fds;
....
FD_SET(1024, &my_fds);

和这段代码有同样的问题:

char my_fds[1024];
....
my_fds[1024] = 1;

假设 FD_SETSIZE 为 1024。

您将覆盖内存中 fd_set 之后的所有内容,幸运的话会导致段错误,否则会导致更细微的错误。

关于c++ - Fd 大于 1024 时 Select 和 FD_SET 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com