+status_t
+BSocketMessenger::_ReadMessage(BMessage& _message, bigtime_t timeout)
+{
+ status_t error = fSocket.WaitForReadable(timeout);
+ if (error != B_OK)
+ return error;
+
+ ssize_t size = 0;
+ ssize_t readSize = fSocket.Read(&size, sizeof(ssize_t));
+ if (readSize < 0)
+ return readSize;
+ else if (readSize != sizeof(ssize_t))
+ return B_BAD_VALUE;
+ if (size <= 0)
+ return B_MISMATCHED_VALUES;
+
+ char* buffer = new(std::nothrow) char[size];
+ if (buffer == NULL)
+ return B_NO_MEMORY;
+
+ ArrayDeleter<char> bufferDeleter(buffer);
+ readSize = fSocket.Read(buffer, size);
+ if (readSize < 0)
+ return readSize;
+ else if (readSize != size)
+ return B_MISMATCHED_VALUES;