方法
GioDatagramBasedreceive_messages
since: 2.48
声明 [源代码]
gint
g_datagram_based_receive_messages (
GDatagramBased* datagram_based,
GInputMessage* messages,
guint num_messages,
gint flags,
gint64 timeout,
GCancellable* cancellable,
GError** error
)
描述 [源代码]
一次性从 datagram_based
收到一个或多个数据报。
messages
必须指向一个 GInputMessage
结构体数组,而 num_messages
必须是此数组的长度。每个 GInputMessage
包含一个指向 GInputVector
结构体数组的指针,这些结构体描述了要写入每个接收到的数据报的缓冲区。
flags
修改所有消息的接收方式。此处的常用参数可以在 GSocketMsgFlags
枚举中找到,但那里的值与系统值相同,标志会原样传递,因此也可以传递特定的系统标志。这些标志影响整体接收操作。影响单个消息的标志将返回在 GInputMessage
.flags 中。
GInputMessage
的其他成员处理方式请参考其文档。
如果 timeout
为负数,则调用将阻塞,直到接收到 num_messages
个消息,远程连接关闭(EOS),cancellable
被取消,或发生错误。
如果 timeout
为 0,则调用将非阻塞返回至多 num_messages
个消息,或在没有消息队列在操作系统中等待接收时返回 G_IO_ERROR_WOULD_BLOCK
。
如果 timeout
为正数,则调用将在相同的条件下阻塞,如果超时之前没有接收到任何消息,将返回 G_IO_ERROR_TIMED_OUT
,否则它将返回在超时之前成功接收的消息数量。注意:这是 MSG_WAITFORONE
在 recvmmsg() 中的行为。
当有消息可用时,等待 G_IO_IN
条件。注意,即使您已之前通知过 G_IO_IN
条件,您仍然可能会从 g_datagram_based_receive_messages()
收到 G_IO_ERROR_WOULD_BLOCK
。
如果远程端关闭连接,则将返回底层数据接收缓冲区中的任何消息,后续对 g_datagram_based_receive_messages()
的调用将返回 0(没有设置错误)。
如果关闭连接或关闭(通过调用 g_socket_close()
或 g_socket_shutdown()
并设置 shutdown_read
,例如对于 GSocket
),此函数的所有调用将返回 G_IO_ERROR_CLOSED
。
如果发生错误,则返回 -1 并设置 error
。只有无法收到零个消息时才会返回错误;否则,在错误之前成功接收的消息数量将被返回。如果 cancellable
被取消,则与任何其他错误一样返回 G_IO_ERROR_CANCELLED
。
自 2.48 以来可用。
参数
message消息
-
类型: 一个
GInputMessage
数组的指针一个
GInputMessage
结构的数组。数组长度在 num_messages
参数中指定。数据由方法的调用者拥有。 num_messages
-
类型:
guint
messages
中的元素数量。 flags
-
类型:
gint
包含整体操作
GSocketMsgFlags
标志的int。 timeout
-
类型:
gint64
最大等待时间(以微秒为单位),0表示不阻塞,-1表示无限期阻塞。
cancellable
-
类型:
GCancellable
一个%GCancellable。
该参数可以是 NULL
。数据由方法的调用者拥有。 error错误
-
类型:
GError **
可恢复错误的返回位置。
该参数可以是 NULL
。如果返回位置不是 NULL
,则必须将其初始化为一个NULL
的GError*
。如果没有错误,方法将使参数保持 NULL
初始化。如果发生错误,参数将设置为一个新的 GError
;调用者将获取数据的所有权,并负责释放它。