Example #1
0
gint sock_close(SockInfo *sock)
{
	GList *cur;

	if (!sock)
		return 0;

#if USE_SSL
	if (sock->ssl)
		ssl_done_socket(sock);
#endif

	if (sock->sock_ch) {
		g_io_channel_shutdown(sock->sock_ch, FALSE, NULL);
		g_io_channel_unref(sock->sock_ch);
	}

	for (cur = sock_list; cur != NULL; cur = cur->next) {
		if ((SockInfo *)cur->data == sock) {
			sock_list = g_list_remove(sock_list, sock);
			break;
		}
	}

	g_free(sock->hostname);
	g_free(sock);

	return 0;
}
Example #2
0
gint sock_close(SockInfo *sock)
{
	gint ret;

	if (!sock)
		return 0;

	if (sock->sock_ch)
		g_io_channel_unref(sock->sock_ch);

#ifdef USE_GNUTLS
	if (sock->ssl)
		ssl_done_socket(sock);
	if (sock->g_source != 0)
		g_source_remove(sock->g_source);
	sock->g_source = 0;
#endif
#ifdef G_OS_WIN32
	shutdown(sock->sock, 1); /* complete transfer before close */
	ret = closesocket(sock->sock);
#else
	ret = fd_close(sock->sock); 
#endif

	g_free(sock->canonical_name);
	g_free(sock->hostname);
	g_free(sock);

	return ret;
}