35void Echo(
const std::shared_ptr<Session>& session) {
36 struct sockaddr_in client_addr;
37 std::vector<char> recv_buffer(2049);
39 socklen_t sock_len =
static_cast<socklen_t
>(
sizeof(client_addr));
42 nbytes =
static_cast<int>(
43 session->RecvFrom(recv_buffer.data(), recv_buffer.size(), 0,
44 (
struct sockaddr*)&client_addr, &sock_len));
46 std::cout <<
"recv from client failed." << std::endl;
49 session->SendTo(recv_buffer.data(), nbytes, 0,
50 (
const struct sockaddr*)&client_addr, sock_len);
54int main(
int argc,
char* argv[]) {
56 std::cout <<
"Usage: " << argv[0] <<
" <server port>" << std::endl;
62 uint16_t server_port =
static_cast<uint16_t
>(atoi(argv[1]));
65 struct sockaddr_in server_addr;
66 server_addr.sin_family = AF_INET;
67 server_addr.sin_addr.s_addr = htons(INADDR_ANY);
68 server_addr.sin_port = htons(server_port);
70 auto session = std::make_shared<Session>();
71 session->Socket(AF_INET, SOCK_DGRAM, 0);
72 if (session->Bind((
struct sockaddr*)&server_addr,
sizeof(server_addr)) <
74 std::cout <<
"bind to port[" << server_port <<
"] failed."