Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

int Impala::Util::Channel::RecvLarge ( SOCKET  sock  )  [inline, private]

Definition at line 603 of file Channel.h.

References CTR_HEADER_SIZE, DATA_BUFFER_SIZE, HandleError(), ILOG_DEBUG, and mBuffer.

Referenced by SendRequest(), and Serve().

00604     {
00605         int rval;
00606 
00607         // first recv CTR message to find out the number of bytes to expect
00608         ILOG_DEBUG("receiving...");
00609         int nrToRecv = 0;
00610         int nrRecv = 0;
00611         char* bufPtr = mBuffer;
00612         int bufSize = DATA_BUFFER_SIZE + CTR_HEADER_SIZE;
00613         do
00614         {
00615             rval = recv(sock, bufPtr, bufSize-nrRecv, 0);
00616             if (rval == SOCKET_ERROR)
00617             {
00618                 HandleError("RecvLarge", true);
00619                 return -1;
00620             }
00621             if (rval == 0)
00622             {
00623                 ILOG_DEBUG("recv got a 0 bytes message");
00624                 return 0;
00625             }
00626             if (nrToRecv == 0)
00627             { // read CTR header for number of bytes to receive
00628                 sscanf(bufPtr, "CTR %d", &nrToRecv);
00629                 ILOG_DEBUG("recv expects " << nrToRecv << " bytes"
00630                              );
00631             }
00632             ILOG_DEBUG("    recv " << rval << " bytes");
00633             bufPtr += rval;
00634             nrRecv += rval;
00635         }
00636         while (nrRecv < nrToRecv);
00637 
00638         ILOG_DEBUG("received " << nrRecv << " bytes");
00639         if (nrRecv > nrToRecv)
00640         {
00641             HandleError("received MORE bytes than expected!", true);
00642             return -1;
00643         }
00644         return nrRecv;
00645     }

Here is the call graph for this function:


Generated on Thu Jan 13 09:24:09 2011 for ImpalaSrc by  doxygen 1.5.1