我使用boost :: asio在Android平台上发送udp包,如下所示:
void SendMessage(Message message, const ip::udp::endpoint& endpoint) {
bool write_in_progress = !send_queue_.empty();
send_queue_.emplace(std::make_pair(std::move(message), endpoint));
if (!write_in_progress) {
DoSendMessage();
}
}
void DoSendMessage() {
service_info_publisher_.async_send_to(
boost::asio::buffer(send_queue_.front().first),
send_queue_.front().second,
std::bind(&ServicePublisher::OnMessageSent,
this,
std::placeholders::_1));
}
void OnMessageSent(const boost::system::error_code& error) {
auto& message = send_queue_.front();
LOGI(kTag,
"OnMessageSent: content: [{}], dest: [{}:{}]",
fmt::StringRef((char*) message.first.data(), message.first.size()),
message.second.address().to_string(),
message.second.port());
if (error) {
LOGE(kTag, "fail to send message, error: [{}]", error.message());
return;
}
send_queue_.pop();
if (!send_queue_.empty()) {
DoSendMessage();
}
}
发送一些成功消息后, boost::asio::udp::socket::async_send_to
将失败。错误消息为:Operation not permitted
。
boost::asio::udp::socket::async_send_to
和
Operation not permitted
async_send_to
失败后我该怎么办,我不能忽略这个错误,这个错误之后似乎停止了io循环。
答案 0 :(得分:1)
可能是
是的,当您遇到错误时,您的函数将返回而不再发布任何异步工作。如果这不是您想要的,只需删除return
语句。
我不建议您重试相同的原因,因为