bool CTCPIPSystemSrvr::do_read(bool bfirstblock, HEADER*& hdr, char*& buffer, short& bufcount, long timeout)
{
	long tag;
	_cc_status cc;
	short error = 0;
	short fnum;
	short wcount;
	long wtimeout = (timeout == 0)? -1: timeout * 100;
	wtimeout = -1;
	short sizeof_header = sizeof(HEADER);

	if (m_nSocketFnum < 0)
	{
		SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_CHECKSOCKET, m_nSocketFnum, 0);
		return false;
	}

	if (bfirstblock)
	{
		if (bufcount < sizeof_header)
		{
			bufcount = getMsgHeader(m_IObuffer, bufcount, TCPI_SRVR_RECV_BUFFER, sizeof_header, wtimeout);
			if (bufcount == -1)
				return false;
		}
		wcount = bufcount;
		bufcount = wcount - sizeof(HEADER);
		buffer = m_IObuffer + sizeof(HEADER);
		hdr = (HEADER*)m_IObuffer;
	}
	else
	{
		if (recv_nw(m_nSocketFnum, m_IObuffer, TCPI_SRVR_RECV_BUFFER, 0, 0) < 0)
		{
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_RECV, errno, 0);
			return false;
		}
		fnum = m_nSocketFnum;
		cc = AWAITIOX(&fnum,,&wcount, &tag, wtimeout);
		if (!_status_eq(cc))
		{
			FILE_GETINFO_(fnum,&error);
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_AWAITIOX, error, cc);
			return false;
		}
		bufcount = wcount;
		buffer = m_IObuffer; 
	}
	return true;
}
bool CTCPIPSystemSrvr::do_read(bool bfirstblock, HEADER*& hdr, char*& buffer, int& bufcount, long timeout)
{
	ssize_t wcount;
	long wtimeout = (timeout == 0)? -1: timeout * 100;
	wtimeout = -1;
	int sizeof_header = sizeof(HEADER);

	if (m_nSocketFnum < 0)
	{
		SET_ERROR((long)this, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_CHECKSOCKET, m_nSocketFnum, 0);
		goto bailout;
	}

	if (bfirstblock)
	{
		if (bufcount < sizeof_header)
		{
			bufcount = getMsgHeader(m_IObuffer, bufcount, MAX_TCP_BUFFER_LENGTH, sizeof_header, wtimeout);
			if (bufcount == -1)
				goto bailout;
		}
		bufcount = bufcount - sizeof(HEADER);

		buffer = m_IObuffer + sizeof(HEADER);
		hdr = (HEADER*)m_IObuffer;
	}
	else
	{
		if ((wcount = recv(m_nSocketFnum, m_IObuffer, MAX_TCP_BUFFER_LENGTH, 0)) <= 0)
        {
			SET_ERROR((long)this, NSK, TCPIP, hdr->operation_id, E_TCPIPROCESS, "do_read - TCP/IP connection closed be the user", O_DO_WRITE_READ, F_AWAITIOX, 0, 0);
			goto bailout;
		}
		bufcount = wcount;
		buffer = m_IObuffer; 
	}
	return true;
bailout:
    error_cleanup();
	return false;

}