我正在尝试调试使用 select() 来实现通信超时的嵌入式应用程序。它是使用 pthreads 的多线程。
我遇到的问题是应用程序似乎在 select() 调用上崩溃了,出现了分段错误或“Killed”。我尝试在呼叫周围放置一个互斥锁,但无济于事。
什么可能导致 select() 使应用程序崩溃?还是我的方向完全错误?
对 select() 的调用如下所示:
fd_set rfds;
struct timeval tv;
int retval, timeout, timeout_usec = 0;
FD_ZERO(&rfds);
FD_SET(fd_port, &rfds);
if (use_timeout) {
timeout = settings_get_int("rs485_timeout", "3");
} else {
timeout = 0;
timeout_usec = 100000;
}
// timeout wait for reply 1000ms
tv.tv_sec = timeout;
tv.tv_usec = timeout_usec; //1000000;
retval = select((int)fd_port+1, &rfds, NULL, NULL, &tv);