SSL_accept()不工作
我已经研究了一段时间了,但在任何地方都没有发现完全相同的问题。我只是遇到了一个非常简单的问题:每当我的echo_服务器尝试运行SSL_accept()不工作,c,sockets,ssl,openssl,eof,C,Sockets,Ssl,Openssl,Eof,我已经研究了一段时间了,但在任何地方都没有发现完全相同的问题。我只是遇到了一个非常简单的问题:每当我的echo_服务器尝试运行SSL_accept()函数时,它不会阻止服务器等待客户端连接,函数只会返回0,如果我进入SSL_get_error(),它会给我SSL_error\u SYSCALL,所以我猜问题是,引用手册中的话,“观察到EOF违反了协议。” 事实上,我不知道这意味着什么,这真的令人沮丧,因为我觉得我错过了一些非常简单的东西,但我不知道是什么 下面是我的accept函数的代码(SSL
SSL_accept()
函数时,它不会阻止服务器等待客户端连接,函数只会返回0,如果我进入SSL_get_error()
,它会给我SSL_error\u SYSCALL
,所以我猜问题是,引用手册中的话,“观察到EOF违反了协议。”
事实上,我不知道这意味着什么,这真的令人沮丧,因为我觉得我错过了一些非常简单的东西,但我不知道是什么
下面是我的accept函数的代码(SSL_ctx先前已初始化,套接字已打开):
此外,我还尝试使用“openssl验证-详细-用途sslserver-CAfile'CACertificate''ServerCertificate''检查我的证书,但它会说我的服务器证书没有问题
欢迎任何帮助,提前谢谢。希望这是件很愚蠢的事,我只是太糊涂了,看不见
每当我的echo_服务器尝试运行SSL_accept()函数时,它都不会阻止服务器等待客户端连接
SSL\u accept
不会为您调用accept
。它希望已经调用了accept
正确的调用顺序是:
socket
bind
听
接受
SSL\u新建
SSL\u set\u fd
SSL\u接受
从下载openssl源代码并查看demos/ssl/serv.cpp。你救了我的命!在调用accept()并阻止服务器后,您怎么可能仍然可以执行SSL_new()等操作。?它不会被封锁吗?或者这就是目的?我的意思是,阻塞它直到找到新连接,然后执行SSL部分?@DisplayName After
accept
返回您有一个新的客户端连接,并且操作系统开始从后台的客户端(如果有)接收数据,供您进入内核套接字缓冲区,您最终将使用read
/recv
/recvmsg
进行阅读。
SSL * sslconnection;
if((sslconnection = SSL_new(ctx)) == NULL){
return NULL;
}
if(SSL_set_fd(sslconnection, socketd) != 1){
return NULL;
}
if(SSL_accept(sslconnection) != 1){
return NULL;
}
return sslconnection;