select()を使用して通信タイムアウトを実装する組み込みアプリケーションをデバッグしようとしています。これは、pthreadを使用してマルチスレッド化されています。
私が抱えている問題は、セグメンテーション違反または「Killed」のいずれかでselect()呼び出しでアプリケーションがクラッシュするように見えることです。私は無駄に呼び出しの周りにミューテックスを配置しようとしました。
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);