虚拟方法
GioDatagramBasedreceive_messages
自从:2.48
声明 [源]
gint
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
为正数,则调用将在与 timeout
为负数时相同的条件下阻塞。如果在收到任何消息之前超时,则返回 G_IO_ERROR_TIMED_OUT
,否则在超时前返回收到的消息数量。(注意:这是 recvmmsg() 上 MSG_WAITFORONE 的有效行为。)
要获得消息可用时通知,等待 G_IO_IN
条件。不过请注意,即使您之前已经通知了 G_IO_IN
条件,g_datagram_based_receive_messages()
也可能从返回 G_IO_ERROR_WOULD_BLOCK
。
如果远程对等方关闭了连接,则底层的接收缓冲区中的所有排队消息都将返回,并且随后的 g_datagram_based_receive_messages()
调用将返回0(不设置错误)。
如果关闭或关闭连接(例如,如果它是 GSocket
,则通过调用 g_socket_close()
或 g_socket_shutdown
并将 shutdown_read
设置,则为 shutdown_read
),则所有对此函数的调用都将返回 G_IO_ERROR_CLOSED
。
在错误情况下返回 -1 并相应地设置 error
。只有在无法接收消息的情况下才会返回错误;否则,将在错误之前返回成功接收的消息数。如果 cancellable
被取消,则与其他任何错误一样返回 G_IO_ERROR_CANCELLED
。
自 2.48 以来提供
参数
messages
-
类型:一个
GInputMessage
数组GInputMessage
结构体的数组。数组的长度在 num_messages
参数中指定。数据由方法的调用者拥有。 num_messages
-
类型:
guint
messages
中的元素数量。 flags
-
类型:
gint
一个包含整体操作
GSocketMsgFlags
标志的整型。 timeout
-
类型:
gint64
等待的最大时间(以微秒为单位),0 表示不阻塞,或 -1 表示无限期阻塞。
cancellable
-
类型:
GCancellable
%GCancellable。
参数可以是 NULL
。数据由方法的调用者拥有。 error
-
类型:
GError **
恢复错误的位置的返回位置。
参数可以是 NULL
。如果返回位置不是 NULL
,那么您必须将其初始化为NULL
GError*
。如果没有错误,则虚拟函数将使该参数保留初始化为 NULL
。在出现错误的情况下,该参数将被设置为一个新分配的 GError
;调用者将获取数据的所有权,并负责释放它。