История изменений
Исправление asaw, (текущая версия) :
for(;;) {
if(global_stop_signal) {
return;
}
// use accept4(listener, NULL, NULL, SOCK_NONBLOCK)
int socket = accept(listener, NULL, NULL);
if(socket < 0) {
throw server_exception("accept error");
} else {
thread client_thread(&server::client, this, socket);
client_thread.detach();
}
}
И чего, этот цикл без Ctrl+C прерываться не будет? Зачем делать client_thread.detach(), если ты всё равно следишь за всеми потоками? Только чтоб пропустить баг и сделать утечку ресурсов...
void ctrl_c_event(int _) {
global_stop_signal = true;
}
Здесь вообще атомики должны быть по-хорошему... В общем, ASIO у этого кода по-любому выигрывает.
Исходная версия asaw, :
for(;;) {
if(global_stop_signal) {
return;
}
// use accept4(listener, NULL, NULL, SOCK_NONBLOCK)
int socket = accept(listener, NULL, NULL);
if(socket < 0) {
throw server_exception("accept error");
} else {
thread client_thread(&server::client, this, socket);
client_thread.detach();
}
}
И чего, этот цикл без Ctrl+C прерываться не будет? Зачем делать client_thread.detach(), если ты всё равно следишь за всеми потоками? Только чтоб пропустить баг и сделать утечку ресурсов...
void ctrl_c_event(int _) {
global_stop_signal = true;
}
Здесь вообще атомики должны быть... В общем, ASIO у этого кода по-любому выигрывает.