Next: , Previous: , Up: How to use GnuTLS in applications   [Contents][Index]

6.8 Buffered data transfer

Although gnutls_record_send is sufficient to transmit data to the peer, when many small chunks of data are to be transmitted it is inefficient and wastes bandwidth due to the TLS record overhead. In that case it is preferable to combine the small chunks before transmission. The following functions provide that functionality.

Function: void gnutls_record_cork (gnutls_session_t session)

session: is a gnutls_session_t type.

If called, gnutls_record_send() will no longer send any records. Any sent records will be cached until gnutls_record_uncork() is called.

This function is safe to use with DTLS after GnuTLS 3.3.0.

Since: 3.1.9

Function: int gnutls_record_uncork (gnutls_session_t session, unsigned int flags)

session: is a gnutls_session_t type.

flags: Could be zero or GNUTLS_RECORD_WAIT

This resets the effect of gnutls_record_cork() , and flushes any pending data. If the GNUTLS_RECORD_WAIT flag is specified then this function will block until the data is sent or a fatal error occurs (i.e., the function will retry on GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED ).

If the flag GNUTLS_RECORD_WAIT is not specified and the function is interrupted then the GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED errors will be returned. To obtain the data left in the corked buffer use gnutls_record_check_corked() .

Returns: On success the number of transmitted data is returned, or otherwise a negative error code.

Since: 3.1.9