![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Остановка сервера [D7, WinXP]
Цукор5 © (2010-01-25 17:19:00)Создал сервер на блокирующих сокетах. В общем, на начальном этапе, при подключении нового клиента создаю отдельный поток(ClientThread) и обмениваюсь данными с клиентом.
Так вот, а предположим, мне необходимо срочно приоставить сервер.
Делаю так :
shutdown(FServerSocket, SD_BOTH);
closesocket(FServerSocket);
Тем самым, мой слушающий поток(ListenThread), для подключения новых клиентов завершается. Но !!! Как быть с потоками, которые уже созданы и работают(ClientThread) ?
Они не останавливаются )) В них продолжается обмен. Да и , собственно, я не вижу средств для остановки :
1) в Select смотрел на ExceptFds:PFDSet. Ничего не происходит при закрытии сокета сервера.
2) "вкрутил" бы WaitFor с TEvent (как для обычного RS232 порта). Так некуда. У меня ж Select работает.
Хотел услышать мнения. Как правильно остановить сервер, с работающими потоками-клиентами.
Спасибо!
Цукор5 (2010-01-25 22:33:00) [1]Да. Не подумал.
Ну что ж ... спасибо, попробую.
grisme (2010-01-25 20:01:00) [2]мм.. наверное, "информация" клиента же хранится где-то? список, динмассив? (подразумеваю хранение там client thread handle, client socket handle и т.п.)
делаем closesocket'ы на все client socket handle'ы и WaitForSingleObject'ы для каждого thread handle. ) ну, как-то так.