| 859 | } |
| 860 | |
| 861 | void do_write_request() { |
| 862 | if (dead) |
| 863 | return ; |
| 864 | |
| 865 | while (!buffers.empty()) { |
| 866 | bufferlist bl; |
| 867 | auto it = buffers.begin(); |
| 868 | for (size_t i = 0; i < buffers.size(); ++i) { |
| 869 | bl.push_back(bufferptr((char*)it->data(), it->size())); |
| 870 | ++it; |
| 871 | } |
| 872 | |
| 873 | ssize_t r = socket.send(bl, false); |
| 874 | std::cerr << " server " << this << " send " << r << std::endl; |
| 875 | if (r == 0) |
| 876 | break; |
| 877 | ASSERT_TRUE(r >= 0); |
| 878 | while (r > 0) { |
| 879 | ASSERT_TRUE(!buffers.empty()); |
| 880 | string &buffer = buffers.front(); |
| 881 | if (r >= (int)buffer.size()) { |
| 882 | r -= (int)buffer.size(); |
| 883 | buffers.pop_front(); |
| 884 | } else { |
| 885 | std::cerr << " server " << this << " sent " << r << std::endl; |
| 886 | buffer = buffer.substr(r, buffer.size()); |
| 887 | break; |
| 888 | } |
| 889 | } |
| 890 | } |
| 891 | if (buffers.empty()) { |
| 892 | if (write_enabled) { |
| 893 | center->delete_file_event(socket.fd(), EVENT_WRITABLE); |
| 894 | write_enabled = false; |
| 895 | } |
| 896 | } else if (!write_enabled) { |
| 897 | ASSERT_EQ(0, center->create_file_event( |
| 898 | socket.fd(), EVENT_WRITABLE, &write_ctxt)); |
| 899 | write_enabled = true; |
| 900 | } |
| 901 | } |
| 902 | |
| 903 | bool finish() { |
| 904 | return dead; |
nothing calls this directly
no test coverage detected