Какой тип `peer` для` DTLSv1_listen`? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь реализовать DTLS-сервер после https://gist.github.com/Jxck/b211a12423622fe304d2370b1f1d30d5, но у меня возникают проблемы при DTLSv1_listen. Я использую OpenSSL 1.1.1 c, и аргумент peer из DTLSv1_listen имеет тип BIO_ADDR *. Я не понимаю, как его использовать, так как документация не очень полезна. Учебное пособие просто передает sockaddr * (или это было sockaddr_in6?) Для сверстника. Будет ли это работать? Если нет, то как я могу преобразовать BIO_ADDR * в sockaddr *?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Создайте новый объект BIO_ADDR, используя BIO_ADDR_new. Так что-то вроде этого:

    BIO_ADDR *addr = BIO_ADDR_new();
    int ret;

    if (addr == NULL)
        goto err;

    ret = DTLSv1_listen(ssl, addr);

    /* Handle the result of DTLSv1_listen */


    BIO_ADDR_free(addr);

Вы можете просмотреть содержимое BIO_ADDR, используя различные доступные функции получения. См. Документацию BIO_ADDR здесь:

https://www.openssl.org/docs/man1.1.1/man3/BIO_ADDR.html

0 голосов
/ 23 апреля 2020

После рассмотрения https://github.com/nplab/DTLS-Examples/blob/master/src/dtls_udp_echo.c создается впечатление, что BIO_ADDR эквивалентно

struct {
    sockaddr_storage sockStorage;
    sockaddr_in6 sock6;
    sockaddr_in sock4;
}
...