| 1037 | } |
| 1038 | |
| 1039 | ssize_t read_data_frame(const Frame& frame, const struct iovec* iov, |
| 1040 | int iovcnt) { |
| 1041 | ssize_t ret = response_->readv(iov, iovcnt); |
| 1042 | if (ret < 0 || static_cast<size_t>(ret) != frame.payload_size) { |
| 1043 | LOG_ERROR("Data frame mismatch: expected `, got `", frame.payload_size, |
| 1044 | ret); |
| 1045 | return ret < 0 ? ret : -1; |
| 1046 | } |
| 1047 | if (!skip_bytes(frame.tail_size)) |
| 1048 | LOG_ERROR_RETURN(EIO, -1, "Failed to skip data frame tail"); |
| 1049 | return ret; |
| 1050 | } |
| 1051 | |
| 1052 | bool skip_frame(const Frame& frame) { |
| 1053 | return skip_bytes(frame.payload_size + frame.tail_size); |