[英]FD_SET causing seg fault
我遇到了FD_SET
崩溃我的程序的问题。 我正在运行boost Boost ASIO示例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),这会导致未定义的行为 :
fd_set是固定大小的缓冲区。 执行FD_CLR()或FD_SET() ,其值为fd为负或等于或大于FD_SETSIZE将导致未定义的行为。 而且,POSIX要求fd是有效的文件描述符。
您应该查看使用poll
, epoll
或更高级别的库,如Boost Asio 。 所有这些选择不会有限制select
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.