// 通过mSocketContext拿到设置了证书和私钥的ssl Context,创建ssl对象,分配输入和输出Bio
DtlsSocket::DtlsSocket(DtlsSocketContext* socketContext, enum SocketType type):
mSocketContext(socketContext),
mSocketType(type),
mHandshakeCompleted(false) {
ELOG_DEBUG("Creating Dtls Socket");
mSocketContext->setDtlsSocket(this);
SSL_CTX* mContext = mSocketContext->getSSLContext();
assert(mContext);
mSsl = SSL_new(mContext);
assert(mSsl != 0);
SSL_set_mtu(mSsl, DTLS_MTU);
mSsl->ctx = mContext;
mSsl->session_ctx = mContext;
switch (type) {
case Client:
SSL_set_connect_state(mSsl);
// SSL_set_mode(mSsl, SSL_MODE_ENABLE_PARTIAL_WRITE |
// SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
break;
case Server:
SSL_set_accept_state(mSsl);
SSL_set_verify(mSsl, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, dummy_cb);
break;