我正在使用示例代码“dtls_udp_echo.c”...
学习DTLS服务器:“DTLSv1_listen(ssl,& client_addr)”
底层套接字是非阻塞的,但会在可读性时唤醒。
一旦客户端执行SSL_connect(),就会调用服务器。所以我相信你好,服务器会传输和接收你好。但是DTLSv1_listen()总是返回零,而client_addr也全为零。我只是不明白这可能是错的。
我采取相关帖子的建议来添加SSL_state_string_long()。在DTLSv1_listen()返回0之后,它会打印“SSL状态之前/接受初始化”。
感谢您的帮助。
答案 0 :(得分:3)
也许您启用了Cookie兑换?我不确定在较新的openssl版本中是否默认启用它。为了防止服务器受到dos攻击,hello消息有不同的行为。客户端发送hello,服务器以helloVerifyRequest回答。客户端发送带有附加cookie的hello。服务器验证此cookie,当它有效时,正常的握手例程继续。发送此HelloVerifyRequest后,DTLSv1_listen返回0。可能是你的问题。我发现了一个关于客户端服务器与dtls通信的近乎完美的文档。这是link。