int tsClient :: length() { unsigned char* bufLength = new unsigned char[4]; memset(bufLength,0,4); memcpy(bufLength,buffer,4); Storage length_storage(bufLength,4); int NN = length_storage.readInt() - 4; delete[] bufLength; return NN; }
bool SocketNs3:: receiveExact(StorageNs3 &msg) throw(SocketException) { /* receive length of vector */ unsigned char* bufLength = new unsigned char[4]; int bytesRead = 0; int readThisTime = 0; while (bytesRead<4) { readThisTime = recv(socket_, (char*)(bufLength + bytesRead), 4-bytesRead, 0); if (readThisTime <= 0) BailOnSocketError("tcpip::SocketNs3::receive() @ recv"); bytesRead += readThisTime; } StorageNs3 length_storage(bufLength,4); int NN = length_storage.readInt() - 4; /* receive vector */ unsigned char* buf = new unsigned char[NN]; bytesRead = 0; readThisTime = 0; while (bytesRead<NN) { readThisTime = recv(socket_, (char*)(buf + bytesRead), NN-bytesRead, 0); if (readThisTime <= 0) BailOnSocketError("tcpip::SocketNs3::receive() @ recv"); bytesRead += readThisTime; } msg.reset(); msg.writePacket(buf, NN); if (verbose_) { cerr << "Rcvd Storage with " << 4 + NN << " bytes via tcpip::SocketNs3: ["; for (int i=0; i < 4; ++i) { cerr << " " << (int)bufLength[i] << " "; } for (int i=0; i < NN; ++i) { cerr << " " << (int)buf[i] << " "; } cerr << "]" << endl; } delete[] buf; delete[] bufLength; return true; }
bool NetStreamSocket:: receiveExact( NetStreamStorage &msg ) throw( NetStreamSocketException ) { /* receive length of vector */ unsigned char * const bufLength = new unsigned char[4]; int bytesRead = 0; int readThisTime = 0; while (bytesRead<4) { readThisTime = recv( socket_, (char*)(bufLength + bytesRead), 4-bytesRead, 0 ); if( readThisTime <= 0 ) { // BailOnNetStreamSocketError definitely throws an exception so clear up heap delete[] bufLength; BailOnNetStreamSocketError( "NetStreamSocket::receive() @ recv" ); } bytesRead += readThisTime; } NetStreamStorage length_storage(bufLength,4); int NN = length_storage.readInt() - 4; /* receive vector */ unsigned char * const buf = new unsigned char[NN]; bytesRead = 0; readThisTime = 0; while (bytesRead<NN) { readThisTime = recv( socket_, (char*)(buf + bytesRead), NN-bytesRead, 0 ); if( readThisTime <= 0 ) { // BailOnNetStreamSocketError definitely throws an exception so clear up heap delete[] bufLength; delete[] buf; BailOnNetStreamSocketError( "netstream::NetStreamSocket::receive() @ recv" ); } bytesRead += readThisTime; } msg.reset(); msg.writePacket(buf, NN); if (verbose_) { cerr << "Rcvd Storage with " << 4 + NN << " bytes via netstream::NetStreamSocket: ["; for (int i=0; i < 4; ++i) { cerr << " " << (int)bufLength[i] << " "; } for (int i=0; i < NN; ++i) { cerr << " " << (int)buf[i] << " "; } cerr << "]" << endl; } delete[] buf; delete[] bufLength; return true; }