Bläddra i källkod

fix: udp client localaddr (#580)

* getsockname after sendto

---------

Co-authored-by: firear <firear>
Co-authored-by: ithewei <ithewei@163.com>
firear 1 år sedan
förälder
incheckning
d73732ea0a
1 ändrade filer med 6 tillägg och 0 borttagningar
  1. 6 0
      event/nio.c

+ 6 - 0
event/nio.c

@@ -287,7 +287,13 @@ static int __nio_write(hio_t* io, const void* buf, int len) {
     case HIO_TYPE_UDP:
     case HIO_TYPE_KCP:
     case HIO_TYPE_IP:
+    {
         nwrite = sendto(io->fd, buf, len, 0, io->peeraddr, SOCKADDR_LEN(io->peeraddr));
+        if (((sockaddr_u*)io->localaddr)->sin.sin_port == 0) {
+            socklen_t addrlen = sizeof(sockaddr_u);
+            getsockname(io->fd, io->localaddr, &addrlen);
+        }
+    }
         break;
     default:
         nwrite = write(io->fd, buf, len);