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