"Hello"를 CAN- 버스에 지속적으로 보내고 SocketCAN을 통해 버스에서 데이터를 읽는 프로그램을 작성 중입니다. 나는이 두 단계를 독립적으로하고 싶다. 즉, 버스에 데이터가 없더라도 프로그램은 여전히 "Hello"를 보냅니다. 그러나 일반적인 CAN 읽기는 불가능합니다.이 기능은 프로그램 실행을 중지하고 데이터를 기다리기 때문입니다.SocketCAN 연속 읽기 및 쓰기
몇 밀리 초 동안 데이터를 차단하지 않거나 대기 상태로 만드는 방법이 있습니까?
SocketCAN에'select'를 사용할 필요는 없습니다 (그렇게해도 문제는 아닙니다). 당신은'setsockopt (SOL_SOCKET, SO_RCVTIMEO, & tv, sizeof (tv))'를 사용할 수있다.'tv'는 수신 타임 아웃을위한'timeval'이다. 타임 아웃이 만료되면'read '는'EAGAIN'과 함께 실패합니다. –
@ Jason C : 나는 당신의 제안을 좋아하지만, 저에게는 효과가 없습니다. 위와 같이 시도했는데 "setsockopt (skt, SOL_CAN_RAW, SO_RCVTIMEO, ...)"로 시도했습니다. "read"호출이 프레임이 도착할 때까지 영원히 차단됨 (시간 초과 없음) – Jeremy
"소켓"에 대한 리눅스 매뉴얼에서 실수로 ... "시간 초과가 0으로 설정된 경우 (기본값) 작업이 절대로 시간 초과되지 않습니다 "프레임을 읽을 필요가 없다면 즉각적으로 반환 할 수 있도록 타임 아웃을 0으로 사용하고 있습니다. – Jeremy