我非常绝望。我一直试图修复以下错误:
如果我尝试通过TLS TCP套接字从PHP发送到C ++,一切都很好。但是,如果我尝试同时发送(两个客户端网站电话 - 来自同一个客户端)我得到!!有时!!来自其中一个连接的OpenSSL错误:
(我收到这两条错误消息的时间最多):
140099339675104:错误:1408F10B:SSL例程:SSL3_GET_RECORD:错误 版本号:s3_pkt.c:389
140099329185248:错误:1408E0F4:SSL 例程:ssl3_get_message:意外消息:s3_both.c:408:
或
140426079958496:错误:140940F5:SSL例程:ssl3_read_bytes:意外 记录:s3_pkt.c:1645:
如果要建立新连接(我使用阻止模式)
accept(basis_socket, (struct sockaddr*) &address, &addrlen)
我们为每个客户端套接字生成一个新的分离线程(我知道线程池更好。我将来会实现此功能)。
所以在每个新线程中我都调用函数set_sockfd();
bool network::clientsocketaction::set_sockfd(int sockfd, struct ssl_properties ssl_settings) {
this->ctx = ctx;
this->accepted_socket = sockfd;
this->ssl_settings = ssl_settings;
try {
//Encryption is enabled and a cipher(s) is given.
SSL_load_error_strings();
OpenSSL_add_ssl_algorithms();
ctx = SSL_CTX_new(TLSv1_2_method());
SSL_CTX_set_ecdh_auto(ctx, 1);
/* Set the key and cert */
if (SSL_CTX_use_certificate_chain_file(ctx, ssl_settings.ssl_certificatepath.c_str()) <= 0) {
ERR_print_errors_cb(print_sslerrors_to_log, NULL);
//exit(EXIT_FAILURE);
}
if (SSL_CTX_use_PrivateKey_file(ctx, ssl_settings.ssl_keypath.c_str(), SSL_FILETYPE_PEM) <= 0 ) {
ERR_print_errors_cb(print_sslerrors_to_log, NULL);
//exit(EXIT_FAILURE);
}
//Set ciphers
SSL_CTX_set_cipher_list(ctx, ssl_settings.ssl_cipher.c_str());
ssl = SSL_new(ctx);
SSL_set_fd(ssl, this->accepted_socket);
if (SSL_accept(ssl) <= 0) {
std::cout << "mdsfdjsfklj" << '\n';
ERR_print_errors_fp(stderr);
ssl_use = false;
return false;
} else {
ssl_use = true;
return true;
}
} catch(std::exception& e) {
closeclient();
return false;
}
}
所以问题是为什么我得到那些OpenSSL错误?
我希望有人可以帮助我!