繁体   English   中英

FD_SET导致seg故障

[英]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是有效的文件描述符。

您应该查看使用pollepoll或更高级别的库,如Boost Asio 所有这些选择不会有限制select

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM