SSLSocket.startHandshake() is a synchronous call when you start handshake between the peers very first time, it will block the calling thread until handshake has completed:
... ...
// initial handshake between peers, don't need Listener:
sslSocket.startHandshake(); // <- this will block the calling thread.
// handshake is completed at this point
... ...
This is not fully documented in Android API, see original Java API for the complete javadoc:
Starts an SSL handshake on this connection. Common reasons include a need to use new encryption keys, to change cipher suites, or to initiate a new session. To force complete reauthentication, the current session could be invalidated before starting this handshake.
If data has already been sent on the connection, it continues to flow during this handshake. When the handshake completes, this will be signaled with an event. This method is synchronous for the initial handshake on a connection and returns when the negotiated handshake is complete. Some protocols may not support multiple handshakes on an existing socket and may throw an IOException.
The situation becomes pretty complicated if you manipulate handshake multiple times between the peers, it could be an asynchronous call in some cases (when you need Listener), check out this online document Fundamental Networking in Java for more details.