code: public SocketAddress receive(ByteBuffer dst) throws IOException {
          if (dst.isReadOnly())
              throw new IllegalArgumentException("Read-only buffer");
          if (dst == null)
              throw new NullPointerException();
          // Android-changed : Do not attempt to bind to 0 (or 0.0.0.0) if there hasn't been
          // an explicit call to bind() yet. Fail fast and return null.
          if (localAddress == null)
              return null;
          synchronized (readLock) {
              ensureOpen();
              // Socket was not bound before attempting receive
              // if (localAddress() == null)
              //     bind(null);
              int n = 0;
              ByteBuffer bb = null;
              try {
                  begin();
                  if (!isOpen())
                      return null;
                  SecurityManager security = System.getSecurityManager();
                  readerThread = NativeThread.current();
                  if (isConnected() || (security == null)) {
                      do {
                          n = receive(fd, dst);
                      } while ((n == IOStatus.INTERRUPTED) && isOpen());
                      if (n == IOStatus.UNAVAILABLE)
                          return null;
                  } else {
                      bb = Util.getTemporaryDirectBuffer(dst.remaining());
                      for (;;) {
                          do {
                              n = receive(fd, bb);
                          } while ((n == IOStatus.INTERRUPTED) && isOpen());
                          if (n == IOStatus.UNAVAILABLE)
                              return null;
                          InetSocketAddress isa = (InetSocketAddress)sender;
                          try {
                              security.checkAccept(
                                  isa.getAddress().getHostAddress(),
                                  isa.getPort());
                          } catch (SecurityException se) {
                              // Ignore packet
                              bb.clear();
                              n = 0;
                              continue;
                          }
                          bb.flip();
                          dst.put(bb);
                          break;
                      }
                  }
                  return sender;
              } finally {
                  if (bb != null)
                      Util.releaseTemporaryDirectBuffer(bb);
                  readerThread = 0;
                  end((n > 0) || (n == IOStatus.UNAVAILABLE));
                  assert IOStatus.check(n);
              }
          }
      }
docs: Set by receive0 (## ugh)