=pod

=head1 NAME

SSL_set_connect_state, SSL_set_accept_state - prepare SSL object to work in client or server mode

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 void SSL_set_connect_state(SSL *ssl);

 void SSL_set_accept_state(SSL *ssl);

=head1 DESCRIPTION

SSL_set_connect_state() sets B<ssl> to work in client mode.

SSL_set_accept_state() sets B<ssl> to work in server mode.

=head1 NOTES

When the SSL_CTX object was created with L<SSL_CTX_new(3)>,
it was either assigned a dedicated client method, a dedicated server
method, or a generic method, that can be used for both client and
server connections. (The method might have been changed with
L<SSL_CTX_set_ssl_version(3)> or
SSL_set_ssl_method().)

When beginning a new handshake, the SSL engine must know whether it must
call the connect (client) or accept (server) routines. Even though it may
be clear from the method chosen, whether client or server mode was
requested, the handshake routines must be explicitly set.

When using the L<SSL_connect(3)> or
L<SSL_accept(3)> routines, the correct handshake
routines are automatically set. When performing a transparent negotiation
using L<SSL_write(3)> or L<SSL_read(3)>, the
handshake routines must be explicitly set in advance using either
SSL_set_connect_state() or SSL_set_accept_state().

=head1 RETURN VALUES

SSL_set_connect_state() and SSL_set_accept_state() do not return diagnostic
information.

=head1 SEE ALSO

L<ssl(3)>, L<SSL_new(3)>, L<SSL_CTX_new(3)>,
LL<SSL_connect(3)>, L<SSL_accept(3)>,
L<SSL_write(3)>, L<SSL_read(3)>,
L<SSL_do_handshake(3)>,
L<SSL_CTX_set_ssl_version(3)>

=cut
