方法
GioSocketsend_message
自:2.22
声明 [src]
gssize
g_socket_send_message (
GSocket* socket,
GSocketAddress* address,
GOutputVector* vectors,
gint num_vectors,
GSocketControlMessage** messages,
gint num_messages,
gint flags,
GCancellable* cancellable,
GError** error
)
描述 [src]
将数据发送到在 socket 上的 address。对于发送多个消息,请参阅 g_socket_send_messages(); 对于更易用的发送,请参阅 g_socket_send() 和 g_socket_send_to()。
如果 address 为 NULL,则消息将被发送到默认接收者(由 g_socket_connect() 设置)。
向量表 必须指向一个由 GOutputVector 结构体组成的数组,而 num_vectors 必须是这个数组的长度。如果 num_vectors 为 -1,则假定 vector 由一个以 NULL 缓冲区指针结尾的 GOutputVector 结束。这些 GOutputVector 结构体描述了收发数据所在的缓冲区。使用多个 GOutputVectors 比手动复制多个数据源到单个缓冲区更加内存高效,也比多次调用 g_socket_send() 更加网络高效。
如果 messages 非 NULL,则指向一个由 num_messages 个 GSocketControlMessage 实例组成的数组。这些对应于要在套接字上发送的控制消息。如果 num_messages 为 -1,则 messages 作为以 NULL 结尾的数组处理。
flags 会修改消息发送的方式。此枚举 GSocketMsgFlags 中有常见的参数可用,但那里的值与系统值相同,所以标志以原样传递,您也可以传递特定于平台的标志。
如果套接字处于阻塞模式,则调用将会阻塞,直到套接字队列中有空间可以容纳数据。如果空间不足且套接字处于非阻塞模式,将返回 G_IO_ERROR_WOULD_BLOCK 错误。当空间可用时,等待 G_IO_OUT 条件。请注意,您可能仍然会在之前已通知 G_IO_OUT 条件的情况下,从 g_socket_send() 接收到 G_IO_ERROR_WOULD_BLOCK 错误。(尤其是在 Windows 上,由于底层 API 的工作方式,这种情况非常常见。)
GOutputVector 中每个向量的总大小不得超过 G_MAXSSIZE。如果消息的大小可能大于这个值,那么必须使用 g_socket_send_message_with_timeout() 函数。
出错时返回 -1,并将错误代码设置到相应的值中。
从 2.22 版本开始可用。
参数
address-
类型:
GSocketAddress一个
GSocketAddress或NULL。该参数可以为 NULL。数据由方法的调用者所有。 vectors-
类型:
GOutputVector的一个数组GOutputVector结构体的一个数组。数组的长度在 num_vectors参数中指定。数据由方法的调用者所有。 num_vectors-
类型:
gintvectors中的元素数量,或 -1。 messages-
类型:
GSocketControlMessage*的一个数组指向一个由
GSocketControlMessages组成的数组的指针,或NULL。该参数可以为 NULL。数组的长度在 num_messages参数中指定。数据由方法的调用者所有。 num_messages-
类型:
gintmessages中的元素数量,或 -1。 flags-
类型:
gint包含
GSocketMsgFlags标志的整数,可能还包含 其他平台特定的标志。 cancellable-
类型:
GCancellable一个 %GCancellable 或
NULL。该参数可以为 NULL。数据由方法的调用者所有。 error-
类型:
GError **恢复错误位置的返回值。
该参数可以为 NULL。如果返回位置不是 NULL,则必须将其初始化为NULLGError*。如果没有错误,方法将保留对 NULL的初始化。如果在出错的情况下,参数将被设置为一个新分配的 GError;调用者将拥有数据,并负责释放它。