OpenSSL DTLSv1_listen:服务器无法从客户端获取消息
||
我有一个大问题!我需要你的帮助!请帮我!
我在Internet上找到了DTLS实现的示例,称为“ 0”。
我在函数中有以下代码描述了服务器的行为:
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
谢谢朋友帮您!
没有找到相关结果
已邀请:
1 个回复
瞥同忙接
DTLSv1_listen会返回吗?在这种情况下,它返回什么? 你也可以打电话
返回关于ssl当前状态的描述。 如果您使用的是Windows,则您引用的示例将不起作用,因为Windows无法按示例预期的那样处理绑定到相同地址和端口的多个UDP套接字。要解决此问题,请参阅http://www.net-snmp.org/wiki/index.php/DTLS_Implementation_Notes。