У меня огромная проблема!И мне нужна твоя помощь!Пожалуйста, помогите мне!
Я нашел пример реализации DTLS в Интернете, он называется dtls_udp_echo.c
.И у меня есть следующий код в функции, которая описывает поведение сервера:
memset(&client_addr, 0, sizeof(struct sockaddr_storage));
/* Create BIO */
bio = BIO_new_dgram(fd, BIO_NOCLOSE);
/* Set and activate timeouts */
timeout.tv_sec = 5;
timeout.tv_usec = 0;
BIO_ctrl(bio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout);
ssl = SSL_new(ctx);
cout << "ssl is" << ssl ;
printf("ssl is \n");
SSL_set_bio(ssl, bio, bio);
SSL_set_options(ssl, SSL_OP_COOKIE_EXCHANGE);
while (DTLSv1_listen(ssl, &client_addr) <= 0){
//printf("%d\n",DTLSv1_listen(ssl, &client_addr));
}
info = (struct pass_info*) malloc (sizeof(struct pass_info));
memcpy(&info->server_addr, &server_addr, sizeof(struct sockaddr_storage));
memcpy(&info->client_addr, &client_addr, sizeof(struct sockaddr_storage));
info->ssl = ssl;
if (pthread_create( &tid, NULL, connection_handle, info) != 0) {
perror("pthread_create");
exit(-1);
}
}
THREAD_cleanup();
Я создал клиента, и он отправил сообщение на сервер.Используя TCPDUMP, я вижу, что пакет
60. 250026 IP (tos 0x0, ttl 64, id 59389, offset 0, flags [DF], proto UDP (17), length 104) 127.0.0.1.8001 > 127.0.0.1.8000: UDP, length 76
где:
127.0.0.1 port 8001 - client
127.0.0.1 port 8000 - server
Но сервер, похоже, не работает, и он не отправил рукопожатие обратно клиенту.Я считаю, что адреса верны, потому что, когда я во время экспериментов менял их, клиенту не удалось отправить рукопожатие на сервер, и произошла ошибка:
SSL_connect: Connection refused
error:00000000:lib(0):func(0):reason(0)
Моя версия openSSL - 1.0.0d
Спасибо тебе, друг, за то, что ты пытаешься помочь мне!