| 916 | C_accept(StressFactory *f, ServerSocket s, ThreadData *data, Worker *w) |
| 917 | : factory(f), bind_socket(std::move(s)), t_data(data), worker(w) {} |
| 918 | void do_request(uint64_t id) override { |
| 919 | while (true) { |
| 920 | entity_addr_t cli_addr; |
| 921 | ConnectedSocket srv_socket; |
| 922 | SocketOptions options; |
| 923 | int r = bind_socket.accept(&srv_socket, options, &cli_addr, worker); |
| 924 | if (r == -EAGAIN) { |
| 925 | break; |
| 926 | } |
| 927 | ASSERT_EQ(0, r); |
| 928 | ASSERT_TRUE(srv_socket.fd() > 0); |
| 929 | Server *cb = new Server(factory, &t_data->worker->center, std::move(srv_socket)); |
| 930 | t_data->servers.insert(cb); |
| 931 | } |
| 932 | } |
| 933 | }; |
| 934 | friend class C_accept; |
| 935 | |