merge in lmp-mr1-release history after reset to lmp-mr1-dev
diff --git a/src/main/java/org/conscrypt/OpenSSLEngineImpl.java b/src/main/java/org/conscrypt/OpenSSLEngineImpl.java
index c70abcd..5888188 100644
--- a/src/main/java/org/conscrypt/OpenSSLEngineImpl.java
+++ b/src/main/java/org/conscrypt/OpenSSLEngineImpl.java
@@ -419,6 +419,7 @@
         // If we haven't completed the handshake yet, just let the caller know.
         HandshakeStatus handshakeStatus = getHandshakeStatus();
         if (handshakeStatus == HandshakeStatus.NEED_UNWRAP) {
+            int positionBeforeHandshake = src.position();
             OpenSSLBIOSource source = OpenSSLBIOSource.wrap(src);
             long sslSessionCtx = 0L;
             try {
@@ -433,7 +434,9 @@
                             getPeerHost(), getPeerPort(), true);
                 }
                 int bytesWritten = handshakeSink.position();
-                return new SSLEngineResult(Status.OK, getHandshakeStatus(), 0, bytesWritten);
+                int bytesConsumed = (src.position() - positionBeforeHandshake);
+                return new SSLEngineResult((bytesConsumed > 0) ? Status.OK : Status.BUFFER_UNDERFLOW,
+                        getHandshakeStatus(), 0, bytesWritten);
             } catch (Exception e) {
                 throw (SSLHandshakeException) new SSLHandshakeException("Handshake failed")
                         .initCause(e);
@@ -488,7 +491,8 @@
 
             int consumed = srcDuplicate.position() - positionBeforeRead;
             src.position(srcDuplicate.position());
-            return new SSLEngineResult(Status.OK, getHandshakeStatus(), consumed, produced);
+            return new SSLEngineResult((consumed > 0) ? Status.OK : Status.BUFFER_UNDERFLOW,
+                    getHandshakeStatus(), consumed, produced);
         } catch (IOException e) {
             throw new SSLException(e);
         } finally {
diff --git a/src/main/java/org/conscrypt/OpenSSLSocketImpl.java b/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
index c3ecac8..327879d 100644
--- a/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
+++ b/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
@@ -432,7 +432,7 @@
 
     @Override
     public int getPort() {
-        return peerHostname == null ? super.getPort() : peerPort;
+        return peerPort == -1 ? super.getPort() : peerPort;
     }
 
     @Override