[Help-gnutls] Re: Confused

Simon Josefsson jas at extundo.com
Sat Sep 3 10:43:02 CEST 2005


Mario Fuentes <mario.lists at gmail.com> writes:

> Hi,
>
> I'm very confused :( .  I set the decoding callback with
> gnutls_transport_set_pull () but in occasions gnutls_record_recv
> returns a negative value, What should I do when I receive an error?, I
> should receive again?

Probably, but it depends on the error returned.  You can use
gnutls_error_is_fatal() to tell whether the error condition is fatal.
If g_e_i_f return false, you should call g_r_r again.  See the
complete g_r_r function documentation below.

Regards,
Simon

 -- Function: ssize_t gnutls_record_recv (gnutls_session_t SESSION,
          void * DATA, size_t SIZEOFDATA)
     SESSION: is a `gnutls_session_t' structure.

     DATA: the buffer that the data will be read into

     SIZEOFDATA: the number of requested bytes

     This function has the similar semantics with `recv()'. The only
     difference is that is accepts a GNUTLS session, and uses different
     error codes.

     In the special case that a server requests a renegotiation, the
     client may receive an error code of GNUTLS_E_REHANDSHAKE.  This
     message may be simply ignored, replied with an alert containing
     NO_RENEGOTIATION, or replied with a new handshake, depending on
     the client's will.

     If EINTR is returned by the internal push function (the default is
     `code'{`recv()'}) then GNUTLS_E_INTERRUPTED will be returned. If
     GNUTLS_E_INTERRUPTED or GNUTLS_E_AGAIN is returned, you must call
     this function again, with the same parameters; alternatively you
     could provide a NULL pointer for data, and 0 for size. cf.
     `code'{`gnutls_record_get_direction()'}.

     A server may also receive GNUTLS_E_REHANDSHAKE when a client has
     initiated a handshake. In that case the server can only initiate a
     handshake or terminate the connection.

     Returns the number of bytes received and zero on EOF.  A negative
     error code is returned in case of an error.  The number of bytes
     received might be less than `code'{count}.





More information about the Gnutls-help mailing list