diff --git a/libc/sock/recvfrom.c b/libc/sock/recvfrom.c index 98cd7317e..27fac1ed6 100644 --- a/libc/sock/recvfrom.c +++ b/libc/sock/recvfrom.c @@ -84,10 +84,14 @@ ssize_t recvfrom(int fd, void *buf, size_t size, int flags, } if (rc != -1) { - if (IsBsd()) { - __convert_bsd_to_sockaddr(&addr); + if (addrsize) { + if (IsBsd()) { + __convert_bsd_to_sockaddr(&addr); + } + __write_sockaddr(&addr, opt_out_srcaddr, opt_inout_srcaddrsize); + } else { + *opt_inout_srcaddrsize = 0; } - __write_sockaddr(&addr, opt_out_srcaddr, opt_inout_srcaddrsize); } END_CANCELATION_POINT;