我正在使用示例代码“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 state before/accept initialization”。
谢谢你的帮助。
也许您启用了 cookie 交换?我不确定它是否在较新的 openssl 版本中默认启用。为了防止服务器受到 dos 攻击,hello 消息有不同的行为。客户端发送一个问候,服务器用一个 helloVerifyRequest 回答。客户端发送带有附加 cookie 的问候。服务器验证此 cookie,当它有效时,正常的握手例程将继续。发送此 HelloVerifyRequest 后,DTLSv1_listen 返回 0。可能那是你的问题。我找到了一个近乎完美的关于客户端服务器与 dtls 通信的文档。这是 link .
我是一名优秀的程序员,十分优秀!