1

我正在使用示例代码“dtls_udp_echo.c”学习 DTLS...

服务器:“DTLSv1_listen(ssl, &client_addr)”

底层套接字是非阻塞的,但会在可读性时唤醒。

一旦客户端执行 SSL_connect(),服务器就会被调用。所以我相信hello是由服务器发送和接收的。但是 DTLSv1_listen() 总是返回零,并且 client_addr 也全为零。我只是不明白有什么问题。

我接受相关帖子的建议添加 SSL_state_string_long()。它在 DTLSv1_listen() 返回 0 后打印“SSL 状态之前/接受初始化”。

感谢您的帮助。

4

1 回答 1

3

也许您启用了 cookie 交换?我不确定它是否在较新的 openssl 版本中默认启用。为了防止服务器受到 dos 攻击,hello 消息有不同的行为。客户端发送一个 hello,服务器用一个 helloVerifyRequest 应答。客户端发送一个带有附加 cookie 的 hello。服务器验证这个cookie,当它有效时,正常的握手例程继续。DTLSv1_listen 在发送此 HelloVerifyRequest 后返回 0。可能那是你的问题。我找到了一个关于客户端服务器与 dtls 通信的近乎完美的文档。这是链接

于 2013-04-22T09:14:31.943 回答