Example #1
0
int swClient_tcp_connect(swClient *cli, char *host, int port, float timeout, int nonblock)
{
	int ret;
	cli->serv_addr.sin_family = cli->sock_domain;
	cli->serv_addr.sin_port = htons(port);
	cli->serv_addr.sin_addr.s_addr = inet_addr(host);

	cli->timeout = timeout;
	swSetTimeout(cli->sock, timeout);
	if(nonblock == 1)
	{
		swSetNonBlock(cli->sock);
	}
	else
	{
		swSetBlock(cli->sock);
	}

	while (1)
	{
		ret = connect(cli->sock, (struct sockaddr *) (&cli->serv_addr), sizeof(cli->serv_addr));
		if (ret < 0)
		{
			if (errno == EINTR)
			{
				continue;
			}
		}
		break;
	}
	return ret;
}
Example #2
0
int swClient_udp_connect(swClient *cli, char *host, int port, float timeout, int udp_connect)
{
	int ret;
	char buf[1024];

	cli->timeout = timeout;
	ret = swSetTimeout(cli->sock, timeout);
	if(ret < 0)
	{
		swWarn("setTimeout fail.errno=%d\n", errno);
		return SW_ERR;
	}

	cli->serv_addr.sin_family = cli->sock_domain;
	cli->serv_addr.sin_port = htons(port);
	cli->serv_addr.sin_addr.s_addr = inet_addr(host);

	if(udp_connect != 1)
	{
		return SW_OK;
	}

	if(connect(cli->sock, (struct sockaddr *) (&cli->serv_addr), sizeof(cli->serv_addr)) == 0)
	{
		//清理connect前的buffer数据遗留
		while(recv(cli->sock, buf, 1024 , MSG_DONTWAIT) > 0);
		return SW_OK;
	}
	else
	{
		return SW_ERR;
	}
}
Example #3
0
static int swClient_udp_connect(swClient *cli, char *host, int port, double timeout, int udp_connect)
{
    char buf[1024];

    if (swClient_inet_addr(cli, host, port) < 0)
    {
        return SW_ERR;
    }

    cli->timeout = timeout;
    if (timeout > 0)
    {
        swSetTimeout(cli->connection.fd, timeout);
    }

    cli->connection.active = 1;

    if (cli->type == SW_SOCK_UNIX_DGRAM)
    {
        struct sockaddr_un* client_addr = &cli->client_addr.addr.un;
        sprintf(client_addr->sun_path, "/tmp/swoole-client.%d.%d.sock", getpid(), cli->connection.fd);
        client_addr->sun_family = AF_UNIX;
        unlink(client_addr->sun_path);

        if (bind(cli->connection.fd, (struct sockaddr *) client_addr, sizeof(cli->client_addr.addr.un)) < 0)
        {
            swSysError("bind(%s) failed.", client_addr->sun_path);
            return SW_ERR;
        }
    }
    else if (udp_connect != 1)
    {
        return SW_OK;
    }

    int bufsize = cli->udp_sock_buffer_size;
    setsockopt(cli->connection.fd, SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof(bufsize));
    setsockopt(cli->connection.fd, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize));

    if (connect(cli->connection.fd, (struct sockaddr *) (&cli->server_addr), cli->server_addr.len) == 0)
    {
        //清理connect前的buffer数据遗留
        while (recv(cli->connection.fd, buf, 1024, MSG_DONTWAIT) > 0);
        return SW_OK;
    }
    else
    {
        swSysError("connect() failed.");
        cli->connection.active = 0;
        return SW_ERR;
    }
}
Example #4
0
int swClient_tcp_connect(swClient *cli, char *host, int port, double timeout, int nonblock)
{
	int ret;
	cli->serv_addr.sin_family = cli->sock_domain;
	cli->serv_addr.sin_port = htons(port);

	if (swClient_inet_addr(cli, host) < 0)
	{
		return SW_ERR;
	}

	cli->timeout = timeout;

	if (nonblock == 1)
	{
		swSetNonBlock(cli->sock);
	}
	else
	{
		swSetTimeout(cli->sock, timeout);
		//block default
		//swSetBlock(cli->sock);
	}

	while (1)
	{
		ret = connect(cli->sock, (struct sockaddr *) (&cli->serv_addr), sizeof(cli->serv_addr));
		if (ret < 0)
		{
			if (errno == EINTR)
			{
				continue;
			}
		}
		break;
	}
	if (ret >= 0)
	{
		cli->connected = 1;
	}
	return ret;
}
Example #5
0
static int swClient_tcp_connect(swClient *cli, char *host, int port, double timeout, int nonblock)
{
    int ret;
    cli->timeout = timeout;

    if (swClient_inet_addr(cli, host, port) < 0)
    {
        return SW_ERR;
    }

    if (nonblock == 1)
    {
        swSetNonBlock(cli->connection.fd);
    }
    else
    {
        if (cli->timeout > 0)
        {
            swSetTimeout(cli->connection.fd, timeout);
        }
        swSetBlock(cli->connection.fd);
    }

    while (1)
    {
        ret = connect(cli->connection.fd, (struct sockaddr *) &cli->server_addr.addr, cli->server_addr.len);
        if (ret < 0)
        {
            if (errno == EINTR)
            {
                continue;
            }
        }
        break;
    }
    if (ret >= 0)
    {
        cli->connection.active = 1;
    }
    return ret;
}