方法
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
,则必须将其初始化为NULL
GError*
。如果没有错误,方法将使该参数初始化为 NULL
。如果发生错误,参数将设置为新分配的 GError
;调用者将拥有数据,并负责释放它。