我想创建一个安全的套接字连接,但是我遇到了一些错误。 这是代码:
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。
答案 0 :(得分:1)
10042是WSAENOPROTOOPT
,10045是WSAEOPNOTSUPP
。它们表示不支持您尝试使用的功能。
如果您仔细阅读文档,您会看到SO_SECURE
仅在WinCE上受支持。在Windows上,如果您希望套接字为您管理安全性,则需要使用Winsock Secure Socket Extensions代替。
否则,请使用在标准套接字(如Microsoft SChannel)或第三方库(如OpenSSL)上运行的SSL / TLS库。