Example #1
0
SockInfo *sock_connect(const gchar *hostname, gushort port)
{
#ifdef G_OS_WIN32
	SOCKET sock;
#else
	gint sock;
#endif

#ifdef INET6
	if ((sock = sock_connect_by_getaddrinfo(hostname, port)) < 0)
		return NULL;
#else
#ifdef G_OS_WIN32
	if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
		g_warning("socket() failed: %d\n", WSAGetLastError());
#else
	if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
		perror("socket");
#endif /* G_OS_WIN32 */
		return NULL;
	}

	if (sock_connect_by_hostname(sock, hostname, port) < 0) {
		if (errno != 0) perror("connect");
		close(sock);
		return NULL;
	}
#endif /* INET6 */

	return sockinfo_from_fd(hostname, port, sock);
}


static void sock_address_list_free(GList *addr_list)
{
	GList *cur;

	for (cur = addr_list; cur != NULL; cur = cur->next) {
		SockAddrData *addr_data = (SockAddrData *)cur->data;
		g_free(addr_data->addr);
		g_free(addr_data);
	}

	g_list_free(addr_list);
}
Example #2
0
SockInfo *sock_connect(const gchar *hostname, gushort port)
{
	SockDesc sock;
	SockInfo *sockinfo;

#ifdef INET6
	sock = sock_connect_by_getaddrinfo(hostname, port);
	if (!SOCKET_IS_VALID(sock))
		return NULL;
#else
	sock = socket(AF_INET, SOCK_STREAM, 0);
	if (!SOCKET_IS_VALID(sock)) {
#ifdef G_OS_WIN32
		g_warning("socket() failed: %ld\n", WSAGetLastError());
#else
		perror("socket");
#endif /* G_OS_WIN32 */
		return NULL;
	}
	sock_set_buffer_size(sock);

	if (sock_connect_by_hostname(sock, hostname, port) < 0) {
		if (errno != 0) perror("connect");
		fd_close(sock);
		return NULL;
	}
#endif /* INET6 */

	sockinfo = g_new0(SockInfo, 1);
	sockinfo->sock = sock;
	sockinfo->sock_ch = g_io_channel_unix_new(sock);
	sockinfo->hostname = g_strdup(hostname);
	sockinfo->port = port;
	sockinfo->state = CONN_ESTABLISHED;
	sockinfo->flags = SYL_SOCK_CHECK_IO;

	sock_list = g_list_prepend(sock_list, sockinfo);

	g_usleep(100000);

	return sockinfo;
}