方法

GioDatagramBasedsend_messages

自: 2.48

声明 [src]

gint
g_datagram_based_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的工作方式。

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

发生错误时返回-1,并将错误相应地设置。仅在发送零个消息时返回错误;否则,将在错误之前返回成功发送的消息数。如果cancellable被取消,则与任何其他错误一样,返回G_IO_ERROR_CANCELLED

自: 2.48

参数

messages

类型: 一个GOutputMessage数组

GOutputMessage结构的数组。

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

类型: guint

messages中的元素数量。

flags

类型: gint

包含GSocketMsgFlags标记的int。

timeout

类型: gint64

最大等待时间(以微秒为单位),0为不阻塞,-1为无限期阻塞。

cancellable

类型: GCancellable

A %GCancellable。

参数可以是NULL
数据由方法的调用者所有。
error

类型: GError **

用于可恢复错误的返回位置。

参数可以是NULL
如果返回位置不是NULL,则必须将其初始化为空GError*
如果没有错误,此参数将由方法初始化为NULL
如果发生错误,参数将设置为一个新的GError分配;调用者将拥有数据,并负责释放它。

返回值

类型: gint

发送的消息数量,或错误时为-1。请注意,如果timeout为零或正数,或者如果num_messages大于UIO_MAXIOV(1024),则发送的消息数量可能小于num_messages,此时调用者可以重试发送剩余的消息。