コード例 #1
0
ファイル: rdf_storage_tstore.c プロジェクト: njh/librdf
static int
librdf_storage_tstore_open(librdf_storage* storage, librdf_model* model)
{
  librdf_storage_tstore_instance *context=(librdf_storage_tstore_instance*)storage->instance;

  if(context->host)
    context->rdfsql=rs_connect_remote(context->host,
                                      context->db, context->user, 
                                      context->password, context->model);
  else
    context->rdfsql=rs_connect(context->db, context->user, 
                               context->password, context->model);
  if(!context->rdfsql)
    return 1;

  return 0;
}
コード例 #2
0
// nonblocking connect is described in detail in chapter 15.4 of stevens unix network programming
bool IPv4Socket::connect_nb(const std::string &host, uint16_t port)
{
    LOG_DEBUG("IPv4Socket::connect_nb "<< host.c_str() << ":" << port);
    connectionInProgress_ = true;
    struct sockaddr *saddr = 0;
    struct sockaddr_in inaddr;
    setup_sockaddr_v4_(inaddr, host, port);
    socklen_t len = sizeof(sockaddr_in);
    saddr = (struct sockaddr *) &inaddr;
    setNonBlocking();
    int res = rs_connect(sock_, saddr, len);
    if (res == 0)
    {
        connectionInProgress_ = false;
        clearNonBlocking();
        return true;
    }
    const int err = getErrorNumber();
#ifdef WIN32
    if (err == WSAEWOULDBLOCK)
        return true;

    if (err != WSAEINPROGRESS && err != WSAEINTR) {
#else
    if (err != EINPROGRESS && err != EINTR) {
#endif
        std::stringstream ss;
        ss << host << ":" << port;
        std::string str = ss.str();
        throw ConnectionRefusedError("Failure to connect to", str.c_str(), err);
    };
    return false;
}


}
コード例 #3
0
ファイル: rstream.c プロジェクト: VinGorilla/gpunet
static int client_connect(void)
{
	struct rdma_addrinfo *rai = NULL;
	struct addrinfo *ai;
	struct pollfd fds;
	int ret, err;
	socklen_t len;

	ret = use_rgai ? rdma_getaddrinfo(dst_addr, port, &rai_hints, &rai) :
			 getaddrinfo(dst_addr, port, &ai_hints, &ai);

	if (ret) {
		perror("getaddrinfo");
		return ret;
	}

	rs = rai ? rs_socket(rai->ai_family, SOCK_STREAM, 0) :
		   rs_socket(ai->ai_family, SOCK_STREAM, 0);
	if (rs < 0) {
		perror("rsocket");
		ret = rs;
		goto free;
	}

	set_options(rs);
	/* TODO: bind client to src_addr */

	if (rai && rai->ai_route) {
		ret = rs_setsockopt(rs, SOL_RDMA, RDMA_ROUTE, rai->ai_route,
				    rai->ai_route_len);
		if (ret) {
			perror("rsetsockopt RDMA_ROUTE");
			goto close;
		}
	}

	ret = rai ? rs_connect(rs, rai->ai_dst_addr, rai->ai_dst_len) :
		    rs_connect(rs, ai->ai_addr, ai->ai_addrlen);
	if (ret && (errno != EINPROGRESS)) {
		perror("rconnect");
		goto close;
	}

	if (ret && (errno == EINPROGRESS)) {
		fds.fd = rs;
		fds.events = POLLOUT;
		ret = do_poll(&fds, poll_timeout);
		if (ret)
			goto close;

		len = sizeof err;
		ret = rs_getsockopt(rs, SOL_SOCKET, SO_ERROR, &err, &len);
		if (ret)
			goto close;
		if (err) {
			ret = -1;
			errno = err;
			perror("async rconnect");
		}
	}

close:
	if (ret)
		rs_close(rs);
free:
	if (rai)
		rdma_freeaddrinfo(rai);
	else
		freeaddrinfo(ai);
	return ret;
}