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; }