我遇到了一个问题,其中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:



您应该看一下使用 poll epoll 还是更高级的库,例如Boost Asio。这些选择中的任何一个都没有select的限制。

10-08 07:53