=pod

=head1 NAME

SSL_get_version, SSL_is_dtls - get the protocol information of a connection

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 const char *SSL_get_version(const SSL *ssl);

 int SSL_is_dtls(const SSL *ssl);

=head1 DESCRIPTION

SSL_get_version() returns the name of the protocol used for the
connection B<ssl>.

SSL_is_dtls() returns one if the connection is using DTLS, zero if not.

=head1 RETURN VALUES

SSL_get_version() returns one of the following strings:

=over 4

=item SSLv3

The connection uses the SSLv3 protocol.

=item TLSv1

The connection uses the TLSv1.0 protocol.

=item TLSv1.1

The connection uses the TLSv1.1 protocol.

=item TLSv1.2

The connection uses the TLSv1.2 protocol.

=item unknown

This indicates that no version has been set (no connection established).

=back

=head1 SEE ALSO

L<ssl(7)>

=head1 HISTORY

SSL_is_dtls() was added in OpenSSL 1.1.0.

=head1 COPYRIGHT

Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
