This tip shows you how to correctly close a SSLEngine connection. Notice that this is not a simple process, like closing a simple socket!
SSLContext context ...;SSLEngine engine ...;ByteBuffer dummy ...;ByteBuffer OutputNet ...;engine.closeOutbound();while(!engine.isOutboundDone()) { dummy.flip(); OutputNet.clear(); result=engine.wrap(dummy,OutputNet); status=result.getStatus(); System.out.println("Status:"+status); if(status==SSLEngineResult.Status.BUFFER_OVERFLOW) { System.out.println("BUFFER_OVERFLOW"); OutputNet=ByteBuffer.allocate(SOutputNet.capacity()+100); } if(status==SSLEngineResult.Status.OK) { System.out.println("OK"); while(OutputNet.hasRemaining()) { try{ int W=channel.write(OutputNet); if(W==-1) { //the channel has been closed } if(W==0) { //nothing has been read } }catch(IOException e) { ? } } OutputNet.compact(); } //BUFFER_UNDERFLOW, CLOSE } //closing the transport mechanismchannel.close();