我遇到了一个问题,其中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
的限制。