コード例 #1
0
ファイル: utils_sockets.c プロジェクト: carriercomm/oio-sds
int
sock_connect (const char *url, GError **err)
{
	struct sockaddr_storage sas;
	gsize sas_len = sizeof(sas);

	if (!grid_string_to_sockaddr (url, (struct sockaddr*) &sas, &sas_len)) {
		g_error_transmit(err, NEWERROR(EINVAL, "invalid URL"));
		return -1;
	}

	int fd = socket_nonblock(sas.ss_family, SOCK_STREAM, 0);
	if (0 > fd) {
		g_error_transmit(err, NEWERROR(EINVAL, "socket error: (%d) %s", errno, strerror(errno)));
		return -1;
	}

	sock_set_reuseaddr(fd, TRUE);

	if (0 != metautils_syscall_connect (fd, (struct sockaddr*)&sas, sas_len)) {
		if (errno != EINPROGRESS && errno != 0) {
			g_error_transmit(err, NEWERROR(EINVAL, "connect error: (%d) %s", errno, strerror(errno)));
			metautils_pclose (&fd);
			return -1;
		}
	}

	sock_set_linger_default(fd);
	sock_set_nodelay(fd, TRUE);
	sock_set_tcpquickack(fd, TRUE);
	*err = NULL;
	return fd;
}
コード例 #2
0
gboolean
grid_string_to_addrinfo(const gchar *start, struct addr_info_s *a)
{
	struct sockaddr_storage sas;
	gsize sas_len = sizeof(sas);
	if (!grid_string_to_sockaddr(start, (struct sockaddr*)&sas, &sas_len))
		return FALSE;
	return addrinfo_from_sockaddr (a, (struct sockaddr*)&sas, sas_len);
}