because of a
     "warning" alert that was sent by the peer (it is always a good idea
     to check any received alerts).  On these non-fatal errors call this
     function again, until it returns 0; cf.
     ‘gnutls_record_get_direction()’ and ‘gnutls_error_is_fatal()’ .  In
     DTLS sessions the non-fatal error ‘GNUTLS_E_LARGE_PACKET’ is also
     possible, and indicates that the MTU should be adjusted.

     When this function is called by a server after a rehandshake
     request under TLS 1.2 or earlier the
     ‘GNUTLS_E_GOT_APPLICATION_DATA’ error code indicates that some data
     were pending prior to peer initiating the handshake.  Under TLS 1.3
     this function when called after a successful handshake, is a no-op
     and always succeeds in server side; in client side this function is
     equivalent to ‘gnutls_session_key_update()’ with ‘GNUTLS_KU_PEER’
     flag.

     This function handles both full and abbreviated TLS handshakes
     (resumption).  For abbreviated handshakes, in client side, the
     ‘gnutls_session_set_data()’ should be called prior to this function
     to set parameters from a previous session.  In server side,
     resumption is handled by either setting a DB back-end, or setting
     up keys for session tickets.

     *Returns:* ‘GNUTLS_E_SUCCESS’ on a successful handshake, otherwise
     a negative error code.

 -- Function: void gnutls_handshake_set_timeout (gnutls_session_t
          SESSION, unsigned int MS)
     SESSION: is a ‘gnutls_session_t’ type.

     MS: is a timeout value in milliseconds

     This function sets the timeout for the TLS handshake process to the
     provided value.  Use an ‘ms’ value of zero to disable timeout, or
     ‘GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT’ for a reasonable default value.
     For the DTLS protocol, the more detailed
     ‘gnutls_dtls_set_timeouts()’ is provided.

     This function requires to set a pull timeout callback.  See
     ‘gnutls_transport_set_pull_timeout_function()’ .

     *Since:* 3.1.0

In GnuTLS 3.5.0 and later it is recommended to use *note
gnutls_session_set_verify_cert:: for the handshake process to ensure the
verification of the peer's identity.  That will verify the peer's
certificate, against the trusted CA store while accounting for stapled
OCSP responses during the handshake; any error will be returned as a
handshake error.

In older GnuTLS versions it is required to verify the peer's certificate
during the handshake by setting a callback with *note
gnutls_certificate_set_verify_function::, and then using *note
gnutls_certificate_verify_peers3:: from it.  See *note Certificate
authentication:: for more information.

‘VOID *note gnutls_session_set_verify_cert:: (gnutls_session_t SESSION, const char * HOSTNAME, unsigned FLAGS)’
‘INT *note gnutls_certificate_verify_peers3:: (gnutls_session_t SESSION, const char * HOSTNAME, unsigned int * STATUS)’

