From 803fbe42e749303f61b5b9768955a2ef70f49dcd Mon Sep 17 00:00:00 2001 From: Gavin Hayes Date: Tue, 23 Apr 2024 21:29:54 -0400 Subject: [PATCH] fix recvfrom returning garbage for address on Windows Uses the same detection method Perl uses for Win32 and Cygwin: https://github.com/Perl/perl5/commit/e122534c08d52962b50cef019dffa861efbfb801#diff-400754cb38a9f79143e9a5b9248562cfde2ec692b374136149a4bef3d0fdbbac --- libc/sock/recvfrom.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libc/sock/recvfrom.c b/libc/sock/recvfrom.c index 27fac1ed6..d3e326f1b 100644 --- a/libc/sock/recvfrom.c +++ b/libc/sock/recvfrom.c @@ -70,6 +70,9 @@ ssize_t recvfrom(int fd, void *buf, size_t size, int flags, if (__isfdkind(fd, kFdSocket)) { rc = sys_recvfrom_nt(fd, (struct iovec[]){{buf, size}}, 1, flags, &addr, &addrsize); + if (rc != -1 && addrsize == sizeof(addr)) { + addrsize = 0; + } } else if (__isfdkind(fd, kFdFile) && !opt_out_srcaddr) { /* socketpair */ if (!flags) { rc = sys_read_nt(fd, (struct iovec[]){{buf, size}}, 1, -1);