ssize_t SocketDescriptor::Read(void *buffer, size_t length, StaticSocketAddress &address) { int flags = 0; #ifdef HAVE_POSIX flags |= MSG_DONTWAIT; #endif socklen_t addrlen = address.GetCapacity(); ssize_t nbytes = ::recvfrom(Get(), (char *)buffer, length, flags, address.GetAddress(), &addrlen); if (nbytes > 0) address.SetSize(addrlen); return nbytes; }