2013-03-07 135 views
1

我學習DTLS使用示例代碼「dtls_udp_echo.c」 ......爲什麼DTLSv1_listen()返回零?

服務器:「DTLSv1_listen(SSL,& client_addr)」

基礎套接字是非阻塞但會醒來後可讀性。

只要客戶端執行SSL_connect(),就會調用服務器。所以我相信你好是由服務器發送和接收的。但DTLSv1_listen()總是返回零,而client_addr也全爲零。我只是不明白什麼可能是錯的。

我接受相關帖子的建議來添加SSL_state_string_long()。它在DTLSv1_listen()返回0之後打印「SSL狀態之前/接受初始化」。

感謝您的幫助。

回答

3

也許你啓用了cookie交換?我不確定它是否在更新的openssl版本中默認啓用。爲了防止服務器遭受dos攻擊,hello消息有不同的行爲。客戶端發送hello,服務器以helloVerifyRequest回答。客戶端發送一個hello與附加的cookie。服務器驗證這個cookie,當它有效時,正常的握手例程繼續。發送此HelloVerifyRequest後,DTLSv1_listen返回0。可能這就是你的問題。我發現了一個關於與dtls進行客戶端服務器通信的近乎完美的文檔這裏是link

相關問題