方法
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()释放。如果messages为NULL,将丢弃所有接收到的控制消息。
如果非NULL,则num_messages将设置为接收到的控制消息数。
如果同时messages和num_messages不为NULL,则num_messages给出的是messages中GSocketControlMessage实例的数量(即不包括NULL终止符)。
flags是一个输入/输出参数。此参数通常可用的参数在GSocketMsgFlags枚举中,但那里的值与系统值相同,标志按原样传递,因此您可以传递系统特定的标志(且g_socket_receive_message()可能传递系统特定的标志)。传入参数的标志会影响接收操作;从它返回的标志与特定的返回消息相关。
与g_socket_receive()一样,如果socket是G_SOCKET_TYPE_DATAGRAM或G_SOCKET_TYPE_SEQPACKET并且您没有提供足够的缓冲空间来读取一个完整消息,数据可能会被丢弃。您可以在flags中传递G_SOCKET_MSG_PEEK来查看当前消息而不将其从接收队列中删除,但没有通用的方式可以找到消息的长度,除非读取到一个足够大的缓冲区。
如果套接字处于阻塞模式,则调用将阻塞直到有数据可接收、连接关闭或发生错误。如果没有数据可用并且套接字处于非阻塞模式,将返回一个G_IO_ERROR_WOULD_BLOCK错误。为了在数据可用时接收通知,请等待G_IO_IN条件。
出错时返回-1,并且根据错误设置error。
自从:2.22
参数
- address
- 
            
            指向一个 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,则必须将其初始化为NULLGError*。如果没有错误,方法将使该参数初始化为 NULL。如果发生错误,参数将设置为新分配的 GError;调用者将拥有数据,并负责释放它。