方法
自:2.22
声明 [源]
gboolean
g_socket_close (
GSocket* socket
GError** error
)
描述 [源]
关闭套接字,关闭任何活动连接。
关闭套接字不会等待所有未完成的I/O操作完成,因此调用者不应依赖于它们在关闭返回无错误时保证完成。
一旦套接字关闭,所有其他操作将返回 G_IO_ERROR_CLOSED
。多次关闭套接字不会返回错误。
套接字将在最后一个引用丢失时自动关闭,但您可能想要调用此函数,以确保资源尽可能早地释放。
请注意,由于TCP的工作方式,如果在设置了 G_IO_IN
条件时关闭套接字,或者远程连接在您关闭套接字之后发送数据但是在读取完所有发送的数据之前就完成了读操作,最近发送的数据可能会丢失。没有简单通用的方法可以避免这个问题;最简单的解决办法是设计网络协议,使得客户端永远不会发送“违规”的数据。另一个解决方案是为服务器调用带有仅设置 shutdown_write
标志的 g_socket_shutdown()
,然后等待客户端注意这一点并关闭其连接的另一侧;之后,服务器可以安全地调用 g_socket_close()
。(如果您调用 g_tcp_connection_set_graceful_disconnect()
,这将是 GTcpConnection
的做法。但当然,这只有在客户端会在服务器之后关闭其连接时才有效。)
自2.22版本起可用。