方法

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()。

如果 addressNULL,则消息将被发送到默认接收者(由 g_socket_connect() 设置)。

向量表 必须指向一个由 GOutputVector 结构体组成的数组,而 num_vectors 必须是这个数组的长度。如果 num_vectors 为 -1,则假定 vector 由一个以 NULL 缓冲区指针结尾的 GOutputVector 结束。这些 GOutputVector 结构体描述了收发数据所在的缓冲区。使用多个 GOutputVectors 比手动复制多个数据源到单个缓冲区更加内存高效,也比多次调用 g_socket_send() 更加网络高效。

如果 messagesNULL,则指向一个由 num_messagesGSocketControlMessage 实例组成的数组。这些对应于要在套接字上发送的控制消息。如果 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

一个 GSocketAddressNULL

该参数可以为 NULL
数据由方法的调用者所有。
vectors

类型: GOutputVector 的一个数组

GOutputVector 结构体的一个数组。

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

类型: gint

vectors 中的元素数量,或 -1。

messages

类型: GSocketControlMessage* 的一个数组

指向一个由 GSocketControlMessages 组成的数组的指针,或 NULL

该参数可以为 NULL
数组的长度在 num_messages 参数中指定。
数据由方法的调用者所有。
num_messages

类型: gint

messages 中的元素数量,或 -1。

flags

类型: gint

包含 GSocketMsgFlags 标志的整数,可能还包含 其他平台特定的标志

cancellable

类型: GCancellable

一个 %GCancellable 或 NULL

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

类型: GError **

恢复错误位置的返回值。

该参数可以为 NULL
如果返回位置不是 NULL,则必须将其初始化为 NULL GError*
如果没有错误,方法将保留对 NULL 的初始化。
如果在出错的情况下,参数将被设置为一个新分配的 GError;调用者将拥有数据,并负责释放它。

返回值

类型: gssize

写入的字节数(可能小于 size),或者在出错时返回 -1。