#include <xtd/xtd>
auto main() -> int {
auto terminate_app = false;
auto on_server_accept = [&](async_result ar) {
auto socket = as<xtd::net::sockets::socket>(ar->async_state()).end_accept(ar);
while (!terminate_app) {
auto buffer = array<byte>(256);
auto number_of_byte_received = socket.receive(buffer);
if (number_of_byte_received) console::write_line(string {buffer.begin(), buffer.begin() + number_of_byte_received});
}
};
auto on_client_connect = [&](async_result ar) {
auto socket = as<xtd::net::sockets::socket>(ar->async_state());
socket.end_connect(ar);
auto counter = 0;
while (!terminate_app) {
auto str = string::format("socket={}, counter={}", socket.handle(), ++counter);
socket.send(array<byte> {str.begin(), str.end()});
thread::sleep(50_ms);
}
};
const size_t client_count = 10;
auto server_socket = net::sockets::socket {net::sockets::address_family::inter_network, net::sockets::socket_type::stream, net::sockets::protocol_type::tcp};
server_socket.bind(net::ip_end_point {net::ip_address::any, 9400});
server_socket.listen();
for (auto index = 0_z; index < client_count; ++index)
server_socket.begin_accept(async_callback(on_server_accept), server_socket);
for (auto index = 0_z; index < client_count; ++index) {
auto socket =
xtd::net::sockets::socket(net::sockets::address_family::inter_network, net::sockets::socket_type::stream, net::sockets::protocol_type::tcp);
socket.begin_connect(net::ip_address::loopback, 9400, async_callback(on_client_connect), socket);
}
console::read_key();
terminate_app = true;
}
@ socket
Socket options apply to all sockets.
Definition socket_option_level.hpp:33