54 {
55 if (argc != 2) {
56 std::cout << "Usage: " << argv[0] << " <server port>" << std::endl;
57 return -1;
58 }
59
61
62 uint16_t server_port = static_cast<uint16_t>(atoi(argv[1]));
64 [&server_port]() {
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);
69
71 session.
Socket(AF_INET, SOCK_STREAM, 0);
72 if (session.
Bind((
struct sockaddr*)&server_addr,
sizeof(server_addr)) <
73 0) {
74 std::cout << "bind to port[" << server_port << "] failed."
75 << std::endl;
76 return;
77 }
79 auto conn_session = session.
Accept((
struct sockaddr*)
nullptr,
nullptr);
80 std::cout << "accepted" << std::endl;
81 auto routine_name =
82 "connected session" + std::to_string(
Time::Now().ToNanosecond());
84 std::bind(
Echo, conn_session), routine_name);
85 },
86 "echo_server");
87
89 return 0;
90}
static Time Now()
get the current time.
int Bind(const struct sockaddr *addr, socklen_t addrlen)
SessionPtr Accept(struct sockaddr *addr, socklen_t *addrlen)
int Socket(int domain, int type, int protocol)
bool CreateTask(const RoutineFactory &factory, const std::string &name)
bool Init(const char *binary_name, const std::string &dag_info)
void Echo(const std::shared_ptr< Session > &session)