다음과 같은 비트의 ASIO 코드가 있습니다.이 비트는 동기식으로 UDP 패킷을 읽습니다. 문제는 특정 크기의 데이터 패킷이 주어진 시간 프레임 (30 초)에 도착하지 않은 경우입니다. recieve_from 함수가 특정 유형의 시간 초과에 대한 오류와 함께 반환되기를 바랍니다.UDP 호출에 타임 아웃 적용 ASIO에서 receive_from을 사용합니다.
for (;;)
{
boost::array<char, 1000> recv_buf;
udp::endpoint remote_endpoint;
asio::error_code error;
socket.receive_from(asio::buffer(recv_buf), // <-- require timeout
remote_endpoint, 0, error);
if (error && error != asio::error::message_size)
throw asio::system_error(error);
std::string message = make_daytime_string();
asio::error_code ignored_error;
socket.send_to(asio::buffer(message),
remote_endpoint, 0, ignored_error);
}
UDP 기반 호출과 관련없는 문서는 타임 아웃 메커니즘을 지원합니다.
ASIO에서 동시성 UDP 호출로 타임 아웃을하는 올바른 방법은 무엇입니까?
분명히 SO_RCVTIMEO와 비슷한 것이 있습니까? – EJP
@EJP 나는 거기에있을 거라 기대했지만 아무 것도 문서에 언급되어 있지 않다. –
놀라운. 'select()'로 합성 할 수 있지만 asio에서는 그렇게한다. – EJP