LINUX.ORG.RU

История изменений

Исправление 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 у этого кода по-любому выигрывает.