void CPjSSLSocket::DoCancel() { /* Operation to be cancelled depends on current state */ switch (state_) { case SSL_STATE_CONNECTING: { RSocket &rSock = ((CPjSocket*)sock_)->Socket(); rSock.CancelConnect(); CleanupSubObjects(); state_ = SSL_STATE_NULL; } break; case SSL_STATE_HANDSHAKING: { securesock_->CancelHandshake(); CleanupSubObjects(); state_ = SSL_STATE_NULL; } break; case SSL_STATE_ESTABLISHED: securesock_->CancelSend(); break; default: break; } }