gpt4 book ai didi

c++ - FD_SET 导致段错误

转载 作者:行者123 更新时间:2023-11-30 02:50:13 24 4
gpt4 key购买 nike

我遇到了 FD_SET 使我的程序崩溃的问题。我正在运行来自 boost Boost ASIO sample HTTP Server 的示例代码.在请求处理程序中,我放置了一个第三方 api,最终会进行以下调用:

fd_set fds; 
FD_ZERO(&fds);
FD_SET(sockfd, &fds);

我的程序似乎在 FD_SET 上崩溃了。是否存在从不同线程调用 FD_SET 会导致段错误的情况?我不确定 FD_SET 究竟是如何工作的,我的直觉是我在一个已经在使用的 fd 上调用 FD_SET。这会导致问题吗?

sockfd 是类成员,每次收到请求时都会创建它,因此我不应该在线程之间共享 sockfd 变量。

最佳答案

在每秒 1000 个请求时,您很可能超过 FD_SETSIZE 限制(在 Linux 上通常为 1024),这导致 undefined behavior :

An fd_set is a fixed size buffer. Executing FD_CLR() or FD_SET() with a value of fd that is negative or is equal to or larger than FD_SETSIZE will result in undefined behavior. Moreover, POSIX requires fd to be a valid file descriptor.

你应该看看使用 poll , epoll ,或更高级别的库,如 Boost Asio .这些选择中的任何一个都不会受到 select 的限制。

关于c++ - FD_SET 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618308/

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