This is correct. ValuesReceived is the number of values that have been received since you opened the socket, so it is telling you that you have already used fread() to read 349 values. It does not tell you anything about how many bytes are already waiting in the buffer. If you have read all of the queued values, then it is not unreasonable at all that fread() and so on might find nothing there.
If you want to know how much data is available to be read, example the BytesAvailable property -- and remember to divide by the size of one value to find out how big the buffer is in terms of values.
Note that if the number of bytes that were sent through the pipe exceeds the input buffer size, then after you read some of the values, the BytesAvailable might not change, because some of the queued values would have been rolled in to fill the buffer. You will not see BytesAvailable decrease below the input buffer size until there is less queued data than the size of your input buffer.
