(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/doc/ssl/SSL_shutdown.pod

    1: =pod
    2: 
    3: =head1 NAME
    4: 
    5: SSL_shutdown - shut down a TLS/SSL connection
    6: 
    7: =head1 SYNOPSIS
    8: 
    9:  #include <openssl/ssl.h>
   10: 
   11:  int SSL_shutdown(SSL *ssl);
   12: 
   13: =head1 DESCRIPTION
   14: 
   15: SSL_shutdown() shuts down an active TLS/SSL connection. It sends the 
   16: "close notify" shutdown alert to the peer.
   17: 
   18: =head1 NOTES
   19: 
   20: SSL_shutdown() tries to send the "close notify" shutdown alert to the peer.
   21: Whether the operation succeeds or not, the SSL_SENT_SHUTDOWN flag is set and
   22: a currently open session is considered closed and good and will be kept in the
   23: session cache for further reuse.
   24: 
   25: The shutdown procedure consists of 2 steps: the sending of the "close notify"
   26: shutdown alert and the reception of the peer's "close notify" shutdown
   27: alert. According to the TLS standard, it is acceptable for an application
   28: to only send its shutdown alert and then close the underlying connection
   29: without waiting for the peer's response (this way resources can be saved,
   30: as the process can already terminate or serve another connection).
   31: When the underlying connection shall be used for more communications, the
   32: complete shutdown procedure (bidirectional "close notify" alerts) must be
   33: performed, so that the peers stay synchronized.
   34: 
   35: SSL_shutdown() supports both uni- and bidirectional shutdown by its 2 step
   36: behaviour.
   37: 
   38: =over 4
   39: 
   40: =item When the application is the first party to send the "close notify"
   41: alert, SSL_shutdown() will only send the alert and then set the
   42: SSL_SENT_SHUTDOWN flag (so that the session is considered good and will
   43: be kept in cache). SSL_shutdown() will then return with 0. If a unidirectional
   44: shutdown is enough (the underlying connection shall be closed anyway), this
   45: first call to SSL_shutdown() is sufficient. In order to complete the
   46: bidirectional shutdown handshake, SSL_shutdown() must be called again.
   47: The second call will make SSL_shutdown() wait for the peer's "close notify"
   48: shutdown alert. On success, the second call to SSL_shutdown() will return
   49: with 1.
   50: 
   51: =item If the peer already sent the "close notify" alert B<and> it was
   52: already processed implicitly inside another function
   53: (L<SSL_read(3)|SSL_read(3)>), the SSL_RECEIVED_SHUTDOWN flag is set.
   54: SSL_shutdown() will send the "close notify" alert, set the SSL_SENT_SHUTDOWN
   55: flag and will immediately return with 1.
   56: Whether SSL_RECEIVED_SHUTDOWN is already set can be checked using the
   57: SSL_get_shutdown() (see also L<SSL_set_shutdown(3)|SSL_set_shutdown(3)> call.
   58: 
   59: =back
   60: 
   61: It is therefore recommended, to check the return value of SSL_shutdown()
   62: and call SSL_shutdown() again, if the bidirectional shutdown is not yet
   63: complete (return value of the first call is 0). As the shutdown is not
   64: specially handled in the SSLv2 protocol, SSL_shutdown() will succeed on
   65: the first call.
   66: 
   67: The behaviour of SSL_shutdown() additionally depends on the underlying BIO. 
   68: 
   69: If the underlying BIO is B<blocking>, SSL_shutdown() will only return once the
   70: handshake step has been finished or an error occurred.
   71: 
   72: If the underlying BIO is B<non-blocking>, SSL_shutdown() will also return
   73: when the underlying BIO could not satisfy the needs of SSL_shutdown()
   74: to continue the handshake. In this case a call to SSL_get_error() with the
   75: return value of SSL_shutdown() will yield B<SSL_ERROR_WANT_READ> or
   76: B<SSL_ERROR_WANT_WRITE>. The calling process then must repeat the call after
   77: taking appropriate action to satisfy the needs of SSL_shutdown().
   78: The action depends on the underlying BIO. When using a non-blocking socket,
   79: nothing is to be done, but select() can be used to check for the required
   80: condition. When using a buffering BIO, like a BIO pair, data must be written
   81: into or retrieved out of the BIO before being able to continue.
   82: 
   83: SSL_shutdown() can be modified to only set the connection to "shutdown"
   84: state but not actually send the "close notify" alert messages,
   85: see L<SSL_CTX_set_quiet_shutdown(3)|SSL_CTX_set_quiet_shutdown(3)>.
   86: When "quiet shutdown" is enabled, SSL_shutdown() will always succeed
   87: and return 1.
   88: 
   89: =head1 RETURN VALUES
   90: 
   91: The following return values can occur:
   92: 
   93: =over 4
   94: 
   95: =item 1
   96: 
   97: The shutdown was successfully completed. The "close notify" alert was sent
   98: and the peer's "close notify" alert was received.
   99: 
  100: =item 0
  101: 
  102: The shutdown is not yet finished. Call SSL_shutdown() for a second time,
  103: if a bidirectional shutdown shall be performed.
  104: The output of L<SSL_get_error(3)|SSL_get_error(3)> may be misleading, as an
  105: erroneous SSL_ERROR_SYSCALL may be flagged even though no error occurred.
  106: 
  107: =item -1
  108: 
  109: The shutdown was not successful because a fatal error occurred either
  110: at the protocol level or a connection failure occurred. It can also occur if
  111: action is need to continue the operation for non-blocking BIOs.
  112: Call L<SSL_get_error(3)|SSL_get_error(3)> with the return value B<ret>
  113: to find out the reason.
  114: 
  115: =back
  116: 
  117: =head1 SEE ALSO
  118: 
  119: L<SSL_get_error(3)|SSL_get_error(3)>, L<SSL_connect(3)|SSL_connect(3)>,
  120: L<SSL_accept(3)|SSL_accept(3)>, L<SSL_set_shutdown(3)|SSL_set_shutdown(3)>,
  121: L<SSL_CTX_set_quiet_shutdown(3)|SSL_CTX_set_quiet_shutdown(3)>,
  122: L<SSL_clear(3)|SSL_clear(3)>, L<SSL_free(3)|SSL_free(3)>,
  123: L<ssl(3)|ssl(3)>, L<bio(3)|bio(3)>
  124: 
  125: =cut
Syntax (Markdown)