Apple Security API 初期化の次のコードがあります。
OSStatus status = noErr;
sslContext = SSLCreateContext(kCFAllocatorDefault, kSSLClientSide, kSSLStreamType);
if (sslContext == nullptr)
{
throw std::runtime_error("cannot create ssl context");
}
status = SSLSetIOFuncs(sslContext, socketRead, socketWrite);
if (status != noErr)
{
throw std::runtime_error("cannot set ssl io functions");
}
status = SSLSetConnection(sslContext, reinterpret_cast<void*>(&handle));
if (status != noErr)
{
throw std::runtime_error("cannot set ssl connections");
}
status = SSLSetPeerDomainName(sslContext, address.c_str(), address.length());
if (status != noErr)
{
throw std::runtime_error("cannot set ssl peer domain name");
}
status = SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true);
if (status != noErr)
{
throw std::runtime_error("cannot set ssl options");
}
status = SSLHandshake(sslContext);
if (status != noErr)
{
throw std::runtime_error("cannot perform ssl handshake");
}
この行で:
status = SSLHandshake(sslContext);
私の SSLWriteFunc コールバックが呼び出されます。SSLWrite 経由で 174 バイトを送信しようとしますが (送信するつもりはありませんでした)、とにかく失敗します。しかし、SSLHandshake に関するドキュメントには、「正常に戻ると、セッションは関数 SSLRead( : : : :) および SSLWrite( : : : ) を使用した通常の安全な通信の準備ができている」と書かれています。したがって、私の場合、このメソッドからの戻りはなく、SSLWriteFunc が突然 SSLWrite 経由でデータを送信しようとしました。私は自分が間違っていることを理解していません。みんな私を助けてください。