int TCPSocket::read(LPVOID data, int buf_sz) {
    if (LISTENER)
        return -1;

    //printf("IN TCPSocket::read()\n");
    return ReadSocket(sock, data, buf_sz);
}
Exemple #2
0
	LWPR::SOCKET_RET_TYPE_E Socket::ReadSocket(SOCKET_FD_T fd, char* buf, int length)
	{
		return ReadSocket(fd, buf, length, INT_MAX);
	}
Exemple #3
0
	LWPR::SOCKET_RET_TYPE_E Socket::ReadSocket(SOCKET_FD_T fd, LWPR::Buffer& buf, int length)
	{
		buf.Size(length);

		return ReadSocket(fd, buf.Inout(), length, INT_MAX);
	}
void XYTCPSocketLayer::ConnectToServer()
{
	if(_stat != States_Disconnected)
	{
		return;
	}
	_stat = States_Connecting;

	pthread_mutex_lock(&_mutex);
	if(_stat != States_Connecting)
	{
		return;
	}

	if(_IsReadThreadRunning)
	{
		_IsReadThreadRunning = false;
		usleep(10000);
	}

	struct sockaddr_in servaddr;
	_fd = socket(AF_INET, SOCK_STREAM, 0);
	if(_fd < 0)
	{
		_stat = States_Disconnected;
		//dispatch error msg
        onError(XYNetworkErrorCode(XYNetworkErrorCode::eXYNetworkErrorCode::CREATE_SOCKET_ERROR));

		return;
	}
    
    //no SIGPIPE
    int set = 1;
    setsockopt(_fd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));
    
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(_port);
	inet_pton(AF_INET, _host.c_str(), &servaddr.sin_addr);
	if(connect(_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0)
	{
		_stat = States_Disconnected;
		//dispatch connect error
        onError(XYNetworkErrorCode(XYNetworkErrorCode::eXYNetworkErrorCode::CONNECT_ERROR));

		return;
	}

	_stat = States_Connected;
	_IsReadThreadRunning = true;
	pthread_mutex_unlock(&_mutex);

    XYThreadManager::ShareIntance()->Start();
    
	//callback
	onConnect();

	//read schedule
	ReadSocket();
    
	return;
}