方法

GioSocketreceive_message

自:2.22

声明 [源位置]

gssize
g_socket_receive_message (
  GSocket* socket,
  GSocketAddress** address,
  GInputVector* vectors,
  gint num_vectors,
  GSocketControlMessage*** messages,
  gint* num_messages,
  gint* flags,
  GCancellable* cancellable,
  GError** error
)

说明 [源位置]

从套接字接收数据。对于接收多条消息,请参阅g_socket_receive_messages();为了更方便使用,请参阅g_socket_receive()和g_socket_receive_from()。

如果address不为NULL,则地址将会设置为接收到的数据包的源地址。address由调用者拥有。

vector必须指向一个数组,该数组包含GInputVector结构,而num_vectors必须是该数组的长度。这些结构描述了将分散存储接收到的数据的缓冲区。如果num_vectors为-1,则假设vectors由一个具有NULL缓冲区指针的GInputVector终止。

作为特殊情况,如果num_vectors为0(在这种情况下,vectors当然可以为NULL),则接收并丢弃一个字节。这是为了便于发送单个‘\0’字节以传输辅数据这一常见做法。

如果非NULL,则messages将指向一个新分配的包含GSocketControlMessage实例的数组或如果未收到此类消息则为NULL。这些对应于从内核接收的控制消息,每个内核的消息一个GSocketControlMessage。此数组以NULL终止,必须在调用每个元素的g_object_unref()后由调用者使用g_free()释放。如果messagesNULL,将丢弃所有接收到的控制消息。

如果非NULL,则num_messages将设置为接收到的控制消息数。

如果同时messagesnum_messages不为NULL,则num_messages给出的是messagesGSocketControlMessage实例的数量(即不包括NULL终止符)。

flags是一个输入/输出参数。此参数通常可用的参数在GSocketMsgFlags枚举中,但那里的值与系统值相同,标志按原样传递,因此您可以传递系统特定的标志(且g_socket_receive_message()可能传递系统特定的标志)。传入参数的标志会影响接收操作;从它返回的标志与特定的返回消息相关。

与g_socket_receive()一样,如果socketG_SOCKET_TYPE_DATAGRAMG_SOCKET_TYPE_SEQPACKET并且您没有提供足够的缓冲空间来读取一个完整消息,数据可能会被丢弃。您可以在flags中传递G_SOCKET_MSG_PEEK来查看当前消息而不将其从接收队列中删除,但没有通用的方式可以找到消息的长度,除非读取到一个足够大的缓冲区。

如果套接字处于阻塞模式,则调用将阻塞直到有数据可接收、连接关闭或发生错误。如果没有数据可用并且套接字处于非阻塞模式,将返回一个G_IO_ERROR_WOULD_BLOCK错误。为了在数据可用时接收通知,请等待G_IO_IN条件。

出错时返回-1,并且根据错误设置error

自从:2.22

参数

address

类型:GSocketAddress

指向一个GSocketAddress指针的指针,或NULL

此参数将由函数设置。
此参数可以为NULL
方法调用者负责获取返回的数据并负责释放它。
vectors

类型:一个GInputVector数组

一个GInputVector结构的数组。

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

类型: gint

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

messages

类型: 一个GSocketControlMessage**数组

一个可能填充有GSocketControlMessages数组的指针,或者NULL

此参数将由函数设置。
方法可以将该参数设置为NULL
此参数可以为NULL
数组长度在num_messages参数中指定。
方法调用者负责获取返回的数据并负责释放它。
num_messages

类型: gint*

一个指针,将填充messages中的元素数量,或者NULL

此参数将由函数设置。
flags

类型: gint*

一个指向包含GSocketMsgFlags标志的整数的指针,可能还包含其他与平台相关的标志

参数将由函数修改。
cancellable

类型: GCancellable

一个%GCancellable或者NULL

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

类型: GError **

用于可恢复错误的返回位置。

此参数可以为NULL
如果返回位置不是NULL,则必须将其初始化为NULL GError*
如果没有错误,方法将使该参数初始化为NULL
如果发生错误,参数将设置为新分配的GError;调用者将拥有数据,并负责释放它。

返回值

类型: gssize

读取的字节数,如果连接被对端关闭则为0,或者错误时为-1。