虚拟方法:

GioDatagramBasedsend_messages

自:2.48

声明 [src]

gint
send_messages (
  GDatagramBased* datagram_based,
  GOutputMessage* messages,
  guint num_messages,
  gint flags,
  gint64 timeout,
  GCancellable* cancellable,
  GError** error
)

描述 [src]

一次从一个datagram_based发送一个或多个数据消息。

messages必须指向一个GOutputMessage结构的数组,且num_messages是该数组的长度的数字。每个GOutputMessage结构包含发送数据的地址和指向描述要发送的每个消息的缓冲区的GOutputVector结构的指针。

flags修改消息的发送方式。此处的常用参数在GSocketMsgFlags枚举中,但那里的值与系统值相同,标志按原样传递,因此也可以传递系统特定的标志。

GOutputMessage的其余部分的处理方式请参见其文档。

如果timeout为负,则调用将阻塞,直到发送num_messages,取消cancellable,或发生错误。

如果timeout为0,则调用将发送多达num_messages而不阻塞,或者如果没有空间发送消息,将返回G_IO_ERROR_WOULD_BLOCK

如果timeout为正,则调用将根据timeout为负的情况进行阻塞。如果在发送任何消息之前达到超时,将返回G_IO_ERROR_TIMED_OUT,否则将返回在超时前成功发送的消息数。

当可以发送消息时,等待G_IO_OUT条件。但请注意,即使在之前已通知G_IO_OUT条件,您仍然可能从g_datagram_based_send_messages()收到G_IO_ERROR_WOULD_BLOCK。特别是在Windows平台上,这是由于底层API的工作方式导致的非常常见的现象。

如果关闭或关闭连接(例如,通过调用具有shutdown_write设置的g_socket_closeg_socket_shutdownGSocket),则此函数的所有调用都将返回G_IO_ERROR_CLOSED

如果发生错误,则返回-1,并将错误设置相应地。如果无法发送零条消息,则将返回错误;否则,将返回在出现错误之前成功发送的消息数。如果取消了cancellable,将像其他任何错误那样返回G_IO_ERROR_CANCELLED

自:2.48

参数

messages

类型:一个GOutputMessage结构的数组

GOutputMessage结构的数组。

数组长度由num_messages参数指定。
数据由方法的调用方拥有。
num_messages

类型:guint

messages中的元素数。

标志

类型: gint

包含 GSocketMsgFlags 标志的整型。

超时

类型: gint64

等待的最大时间(微秒),0 表示不阻塞,或 -1 表示无限期阻塞。

可取消

类型: GCancellable

%GCancellable。

参数可以为 NULL
数据由方法的调用方拥有。
错误

类型: GError **

可恢复错误的返回位置。

参数可以为 NULL
如果返回位置不是 NULL,则必须将其初始化为 NULLGError*
如果没有错误,虚函数将保留参数初始化为 NULL
如果发生错误,参数将被设置为一个新的 GError 分配;调用者将承担数据所有权,并负责释放它。

返回值

类型: gint

发送的消息数量,或错误发生时返回 -1。请注意,如果 timeout 为零或正值,或者如果 num_messages 大于 UIO_MAXIOV(1024),则发送的消息数量可能小于 num_messages。在这种情况下,调用者可以尝试重新发送剩余的消息。