diff --git a/pvAccessApp/remote/blockingTCPTransport.cpp b/pvAccessApp/remote/blockingTCPTransport.cpp index ff737cf..f875dd2 100644 --- a/pvAccessApp/remote/blockingTCPTransport.cpp +++ b/pvAccessApp/remote/blockingTCPTransport.cpp @@ -472,11 +472,10 @@ namespace epics { int requiredPosition = (currentStartPosition+requiredBytes); while(_socketBuffer->getPosition()getRemaining()); - ssize_t bytesRead = recv(_channel, readBuffer, maxToRead, 0); - _socketBuffer->put(readBuffer, 0, bytesRead); + int pos = _socketBuffer->getPosition(); + ssize_t bytesRead = recv(_channel, (void*)(_socketBuffer->getArray()+pos), + _socketBuffer->getRemaining(), 0); + _socketBuffer->setPosition(pos+bytesRead); if(bytesRead<=0) { diff --git a/pvAccessApp/remote/blockingUDPTransport.cpp b/pvAccessApp/remote/blockingUDPTransport.cpp index 2981fd6..8e61062 100644 --- a/pvAccessApp/remote/blockingUDPTransport.cpp +++ b/pvAccessApp/remote/blockingUDPTransport.cpp @@ -160,7 +160,6 @@ namespace epics { // This function is always called from only one thread - this // object's own thread. - char _readBuffer[MAX_UDP_RECV]; osiSockAddr fromAddress; Transport::shared_pointer thisTransport = shared_from_this(); @@ -183,8 +182,8 @@ namespace epics { socklen_t addrStructSize = sizeof(sockaddr); - int bytesRead = recvfrom(_channel, _readBuffer, - MAX_UDP_RECV, 0, (sockaddr*)&fromAddress, + int bytesRead = recvfrom(_channel, (void*)_receiveBuffer->getArray(), + _receiveBuffer->getRemaining(), 0, (sockaddr*)&fromAddress, &addrStructSize); if(bytesRead>0) { @@ -203,11 +202,7 @@ namespace epics { } if(!ignore) { - // TODO do not copy.... wrap the buffer!!! - _receiveBuffer->put(_readBuffer, 0, - bytesRead <_receiveBuffer->getRemaining() ? - bytesRead : _receiveBuffer->getRemaining() - ); + _receiveBuffer->setPosition(bytesRead); _receiveBuffer->flip();