[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