pw_rpc: improve error handling for SendResponse

 - distinguish between encode and send errors

Change-Id: I51cf7aba35b4779d79c72a8020fe7193b5a496ee
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/39666
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
diff --git a/pw_rpc/nanopb/nanopb_method.cc b/pw_rpc/nanopb/nanopb_method.cc
index 498eb42..6de176e 100644
--- a/pw_rpc/nanopb/nanopb_method.cc
+++ b/pw_rpc/nanopb/nanopb_method.cc
@@ -73,16 +73,22 @@
 
     response.set_payload(payload_buffer.first(encoded.size()));
     response.set_status(status);
-    if (channel.Send(response_buffer, response).ok()) {
+    pw::Status send_status = channel.Send(response_buffer, response);
+    if (send_status.ok()) {
       return;
     }
 
+    PW_LOG_WARN("Failed to send response packet for channel %u, status %u",
+                unsigned(channel.id()),
+                send_status.code());
+
     // Re-acquire the buffer to encode an error packet.
     response_buffer = channel.AcquireBuffer();
+  } else {
+    PW_LOG_WARN("Failed to encode response packet for channel %u, status %u",
+                unsigned(channel.id()),
+                encoded.status().code());
   }
-
-  PW_LOG_WARN("Failed to encode response packet for channel %u",
-              unsigned(channel.id()));
   channel.Send(response_buffer,
                Packet::ServerError(request, Status::Internal()));
 }