[TurnPort] Fix error return value in TurnPort::SendTo

While looking into chromium:1374310 I noticed that the function was
returning 0 in a particular case. 0 isn't a valid return value as per
this shortened snippet from connection.cc [1] specifically meant to
catch this:

  int sent = port_->SendTo(...);
  if (sent <= 0) {
    RTC_DCHECK(sent < 0);
    error_ = port_->GetError();
    ...

[1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/p2p/base/connection.cc;l=1687

Also propagating the socket error value in case of failure.

Bug: chromium:1374310
Change-Id: Ie00f60388d53d4127c1d419ab0352e0574044485
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/279282
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38408}
diff --git a/p2p/base/turn_port.cc b/p2p/base/turn_port.cc
index c8b7f30..3b060f7 100644
--- a/p2p/base/turn_port.cc
+++ b/p2p/base/turn_port.cc
@@ -653,7 +653,12 @@
   if (!entry) {
     RTC_LOG(LS_ERROR) << "Did not find the TurnEntry for address "
                       << addr.ToSensitiveString();
-    return 0;
+    // Although not finding an entry isn't a socket error, at this level we need
+    // to return SOCKET_ERROR (-1) and for ease of troubleshooting/debugging
+    // assign a value to `error_` that makes some semantic sense. In this case
+    // we pick EADDRNOTAVAIL (10049 on Windows, 9903 in errno.h).
+    error_ = EADDRNOTAVAIL;
+    return SOCKET_ERROR;
   }
 
   if (!ready()) {
@@ -666,6 +671,7 @@
   CopyPortInformationToPacketInfo(&modified_options.info_signaled_after_sent);
   int sent = entry->Send(data, size, payload, modified_options);
   if (sent <= 0) {
+    error_ = socket_->GetError();
     return SOCKET_ERROR;
   }