方法
GioSocketsend_messages
自: 2.44
声明 [src]
gint
g_socket_send_messages (
GSocket* socket,
GOutputMessage* messages,
guint num_messages,
gint flags,
GCancellable* cancellable,
GError** error
)
描述 [src]
一次性从socket发送多个数据消息。这是该调用中最复杂且功能最全面的一个版本。更简易的使用方式,请参考g_socket_send(), g_socket_send_to() 和 g_socket_send_message()。
messages 必须指向一个 GOutputMessage 结构体数组和 num_messages 必须是该数组的长度。每个 GOutputMessage 包含发送数据的地址以及一个指向数组 GOutputVector 结构体的指针,该数组描述了为每个消息要发送的数据从哪里汇总的缓冲区。使用多个 GOutputVectors 比手动将数据从多个来源复制到单个缓冲区更节省内存,比多次调用 g_socket_send() 更节省网络带宽。一次性发送多个消息可以避免在需要发送大量数据包的情况下(例如,通过 RTP/UDP 进行高带宽视频流传输)或需要将相同的数据发送给多个接收者的场景中,进行大量的系统调用开销。
flags 修改消息的发送方式。此枚举中常见的参数在 GSocketMsgFlags 中可用,但该值与系统值相同,标志会按原样传递,因此你也可以传递特定于系统的标志。
如果套接字处于阻塞模式,则调用将阻塞,直到套接字队列中有足够的空间存储所有数据。如果没有可用的空间且套接字处于非阻塞模式,如果没有写入任何数据,则会返回 G_IO_ERROR_WOULD_BLOCK 错误,否则将返回发送的消息数。要等待空间可用,请等待 G_IO_OUT 条件。注意,即使你之前已经收到 G_IO_OUT 条件的提示,你仍然可能会从 g_socket_send() 收到 G_IO_ERROR_WOULD_BLOCK。特别是在 Windows 上,这很常见,因为底层 API 的方式。
如果出错,则返回 -1 并相应设置 error。只有在无法发送任何消息的情况下才会返回错误;否则,在错误之前成功发送的消息数将返回。
自版本 2.44 以来可用
参数
messages-
类型: 一个
GOutputMessage数组一个
GOutputMessage结构体数组。数组的长度在 num_messages参数中指定。数据由方法调用者拥有。 num_messages-
类型:
guintmessages中的元素数量。 flags-
类型:
gint包含
GSocketMsgFlags标志的整数,可能还包含 其他平台特定的标志。 cancellable-
类型:
GCancellableA %GCancellable 或
NULL。该参数可以是 NULL。数据由方法调用者拥有。 error-
类型:
GError **一个可恢复错误的返回位置。
该参数可以是 NULL。如果返回位置不是 NULL,则必须将其初始化为NULLGError*。如果没有错误,方法将保留初始化到 NULL。在出错的情况下,该参数将设置为一个新分配的 GError;调用者将获取该数据,并负责释放它。