1
私は以下のASIOコードを持ち、同期してUDPパケットを読み取ります。問題は、与えられたサイズのデータパケットが与えられた時間フレーム(30秒)に到着していない場合です。私はrecieve_from関数が何らかの種類のエラーで特定のタイムアウトに戻ることを望みます。ASIOのUDPコール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