苹果安全传输代码错误
apple secure transport code error
我有以下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发送数据。我只是不明白我做错了什么。请伙计们帮助我。
SSLRead()
和SSLWrite()
应该从应用程序代码中调用,而不是从SSLReadFunc
和SSLWriteFunc
回调内部调用。
在SSLReadFunc
和SSLWriteFunc
回调中,SecureTransport 要求您从套接字接收/发送数据(您使用 SSLSetConnection
设置(。因此,在SSLWriteFunc
,您将获得加密数据以通过套接字发送。SSLWriteFunc
的实现应如下所示:
OSStatus mySSLWriteFunc(SSLConnectionRef connection, const void *data, size_t *dataLength)
{
int *handle;
SSLGetConnection(connection, &handle);
size_t result = write(*handle, data, *dataLength);
if (result == -1)
{
if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
return errSSLWouldBlock;
else
// fill this in
}
else
{
*dataLength = result;
}
return noErr;
}
您需要为此添加额外的错误处理(以防套接字关闭等(,但这应该是基本结构。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 为什么我在使用void函数时得到错误代码C2276
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 逻辑运算符上出现错误代码 a')'
- 'val' Arduino 错误代码之前的预期'('
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- WSALookupServiceBegin() 上的错误代码 10022(无效的 arugment)
- C++ Schannel POST 400 错误代码错误请求
- openCL-创建子缓冲区返回错误代码13
- 更新了Runge-Kutta(RK4)C++错误代码中的二阶DE
- 获取有关使用未初始化内存的错误代码
- 排序程序的意外错误代码
- 正在将DJI错误代码记录到流中
- 来自API的错误代码..处理什么是好的做法