Function libnghttp2_sys::nghttp2_session_recv [−][src]
pub unsafe extern "C" fn nghttp2_session_recv(
session: *mut nghttp2_session
) -> c_int
@function
Receives frames from the remote peer.
This function receives as many frames as possible until the user
callback :type:nghttp2_recv_callback
returns
:enum:NGHTTP2_ERR_WOULDBLOCK
. This function calls several
callback functions which are passed when initializing the
|session|. Here is the simple time chart which tells when each
callback is invoked:
-
:type:
nghttp2_recv_callback
is invoked one or more times to receive frame header. -
When frame header is received, :type:
nghttp2_on_begin_frame_callback
is invoked. -
If the frame is DATA frame:
-
:type:
nghttp2_recv_callback
is invoked to receive DATA payload. For each chunk of data, :type:nghttp2_on_data_chunk_recv_callback
is invoked. -
If one DATA frame is completely received, :type:
nghttp2_on_frame_recv_callback
is invoked. If the reception of the frame triggers the closure of the stream, :type:nghttp2_on_stream_close_callback
is invoked.
-
-
If the frame is the control frame:
-
:type:
nghttp2_recv_callback
is invoked one or more times to receive whole frame. -
If the received frame is valid, then following actions are taken. If the frame is either HEADERS or PUSH_PROMISE, :type:
nghttp2_on_begin_headers_callback
is invoked. Then :type:nghttp2_on_header_callback
is invoked for each header name/value pair. For invalid header field, :type:nghttp2_on_invalid_header_callback
is called. After all name/value pairs are emitted successfully, :type:nghttp2_on_frame_recv_callback
is invoked. For other frames, :type:nghttp2_on_frame_recv_callback
is invoked. If the reception of the frame triggers the closure of the stream, :type:nghttp2_on_stream_close_callback
is invoked. -
If the received frame is unpacked but is interpreted as invalid, :type:
nghttp2_on_invalid_frame_recv_callback
is invoked.
-
This function returns 0 if it succeeds, or one of the following negative error codes:
:enum:NGHTTP2_ERR_EOF
The remote peer did shutdown on the connection.
:enum:NGHTTP2_ERR_NOMEM
Out of memory.
:enum:NGHTTP2_ERR_CALLBACK_FAILURE
The callback function failed.
:enum:NGHTTP2_ERR_BAD_CLIENT_MAGIC
Invalid client magic was detected. This error only returns
when |session| was configured as server and
nghttp2_option_set_no_recv_client_magic()
is not used with
nonzero value.
:enum:NGHTTP2_ERR_FLOODED
Flooding was detected in this HTTP/2 session, and it must be
closed. This is most likely caused by misbehaviour of peer.