方法
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
分配;调用者将拥有数据,并负责释放它。