SSLSocket setsockopt返回10042和WSAIoctl 10045

时间:2016-08-13 07:14:50

标签: c++ c winapi

我想创建一个安全的套接字连接,但是我遇到了一些错误。 这是代码:

int main(int argc,char *argv[])
{
    WSADATA wd;
    SOCKET s;
    SSLVALIDATECERTHOOK hook;
    int secopt=SO_SEC_SSL;

    WSAStartup(MAKEWORD(2,2),&wd);
    s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    setsockopt(s,SOL_SOCKET,SO_SECURE,&secopt,sizeof(secopt));
    hook.HookFunc=SSLValCert;
    hook.pvArg=NULL;
    WSAIoctl(s,SO_SSL_SET_VALIDATE_CERT_HOOK,&hook,sizeof(hook),NULL,0,NULL,NULL,NULL);
    /* Some code goes here */
    closesocket(s);
    WSACleanup();
}

int CALLBACK SSLValCert(DWORD dwType,LPVOID pvArg,DWORD dwChainLen,LPBLOB pCertChain,DWORD dwFlags)
{
    return SSL_ERR_OKAY;
}

在此代码setsockopt中返回10042,WSAIoctl返回10045。

1 个答案:

答案 0 :(得分:1)

10042是WSAENOPROTOOPT,10045是WSAEOPNOTSUPP。它们表示不支持您尝试使用的功能。

如果您仔细阅读文档,您会看到SO_SECURE仅在WinCE上受支持。在Windows上,如果您希望套接字为您管理安全性,则需要使用Winsock Secure Socket Extensions代替。

否则,请使用在标准套接字(如Microsoft SChannel)或第三方库(如OpenSSL)上运行的SSL / TLS库。